2
respostas

Por quê 'resultado.Value' se somente 'resultado' nos dá a resposta?

Tenho uma dúvida besta mas preciso perguntar:

Eu havia colocado desta forma abaixo, somente "resultado" pra escrever na tela e deu certo, normal. Mas o professor colocou " resultado.Value". Qual a diferença? Isso é importante? Acho que perdi alguma coisa.

//Meu:
...
Match resultado = Regex.Match(textoDeTeste, padrao);
 Console.WriteLine(resultado);

 //Professor:
 ...
 Match resultado = Regex.Match(textoDeTeste, padrao);
 Console.WriteLine(resultado.Value);
2 respostas

Olá Priscila

O objeto resultado é do tipo Match. Por ser do tipo Match ele tem propriedades e metodos que podem ser utilizados.

O Value retorna a string modificada pelo resultado da operação, que é um retorno diferente.

No Visual Studio por exemplo, quandfo vc digita resultado e um . (ponto), você tem acesso a todas as propriedades e métos, inclusive com o tipo de retorno e entrada, se tiver. Vale sempre a pena explorar para identificar o que melhor atende sua necessidade.

Espero ter ajudado.

Oi Priscila, tudo bom?

Isso só funcionou pra você porque o Match teve sucesso!

Quando você passa um objeto para oConsole.WriteLine(), ele automaticamente da um.ToString() para poder exibir no console, certo? Ou seja, ficaria assim resultado.ToString().

Se você acessar as propriedades da classe Match, você consegue ver o que o ToString faz com o objeto.

Veja o que diz no override de ToString

        //
        // Summary:
        //     Gets the captured substring from the input string.
        //
        // Returns:
        //     The actual substring that was captured by the match.
        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
        public override string ToString();

Isso quer dizer que ele pega o valor atual do que foi capturado pelo Match

Se por acaso o seu resultado tivesse falhado, você teria um valor vazio impresso na tela.

Então seria legal você verificar se ocorreu tudo certo antes de exibir o resultado.

exemplo:

Match resultado = Regex.Match(textoDeTeste, padrao);
if(resultado.Success)
{
  Console.WriteLine(resultado);
}

Apenas para complementar, da maneira que você está fazendo, se na sua string possuir mais de um resultado será exibido apenas o primeiro que o Match encontrar.

Veja esse exemplo na documentação oficial da Microsoft

Onde a verificação se ocorreu Match está preso em um looping, e dentro dele está buscando o Proximo Match e imprimindo no Console.

Espero ter sido claro, qualquer dúvida pode comentar...