1
resposta

[Dúvida] Conversão

Boa noite, alguém poderia me dar orientação em relação a diferença dos métodos de conversão.

A primeira forma foi apresentada no desenvolvimento do Screen Sound.
//

string opcao = Convert.ToString(Console.ReadLine())!;
int opcaoEscolhida = Convert.ToInt32(opcao);

switch (opcaoEscolhida)

//

A segunda forma foi apresentada na aula do menu com o do-while e switch-case.

//

int opcao = int.Parse(Console.ReadLine());

switch (opcao)

//

1 resposta

Oii, Elvis!

No dia a dia da programação, você encontrará diversas formas de transformar um dado em outro, e entender qual escolher ajuda a evitar que o programa pare de funcionar inesperadamente.

Vou explicar as diferenças entre esses métodos de forma simples.

1. int.Parse()

Este método é direto. Ele pega uma string e tenta transformá-la em um número inteiro.

  • Comportamento: Se o usuário digitar algo que não seja um número (como "abc") ou deixar o campo vazio, o programa apresentará um erro e será interrompido.
  • Quando usar: Quando você tem certeza absoluta de que o dado recebido é um número válido e não será nulo.

2. Convert.ToInt32()

Este método funciona de forma parecida com o int.Parse(), mas ele é um pouco mais tolerante em um aspecto específico.

  • Comportamento com Nulos: Se o valor passado for null (nulo), o Convert.ToInt32() não quebra o programa; ele simplesmente retorna o valor 0.
  • Comportamento com textos: Se o usuário digitar letras ("abc"), ele ainda causará um erro, assim como o int.Parse().
  • A "Primeira Forma" que você citou: No exemplo Convert.ToInt32(Convert.ToString(Console.ReadLine())), há um passo extra desnecessário, pois o Console.ReadLine() já entrega uma string. Basta usar Convert.ToInt32(Console.ReadLine()).

Uma dica extra: O int.TryParse()

Pra sistemas reais, onde não sabemos o que o usuário vai digitar no console, existe uma alternativa ainda mais segura que não foi mencionada nos exemplos acima: o int.TryParse().

Diferente dos outros dois, ele não interrompe o programa se houver erro. Ele tenta converter e devolve um valor verdadeiro (true) ou falso (false), permitindo que você trate o erro sem que a aplicação feche.

Console.Write("Digite uma opção: ");
if (int.TryParse(Console.ReadLine(), out int resultado))
{
    // A conversão deu certo, o número está na variável 'resultado'
    switch(resultado) { ... }
}
else
{
    Console.WriteLine("Por favor, digite apenas números!");
}

A escolha entre os métodos depende do quanto você deseja proteger seu código contra entradas inesperadas. Para aprendizado, o int.Parse() é comum por ser mais curto, mas em projetos maiores, o Convert ou o TryParse costumam aparecer com mais frequência.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!