Como inserir diferentes tipos de dados através do teclado em C#?

Sou iniciante em C# e gostaria de saber como faço para que a máquina leia diferentes tipos de dados que um usuário digitar. Sei que podemos dar alguns valores através do Console.ReadLine() mas, tô sabendo que esse método deve ser usado com string.

  • Também sei que tem um tal de Parse e um Convert.Toxxxxx() mas nem sei a diferença ente eles?
  • Se eu quiser dar valores para variáveis do tipo int, float, double, …, como faço?

:slight_smile:

1 curtida
1 curtida

Então a diferença entre o Parse e Convert é o seguinte:

Quando você usa o Parse só consegue converter se o valor for do tipo String e usando a classe Convert você consegue converter para qualquer outro tipo. int , Double , Float , Bool etc.

Existe também no C# uma conversão Explícita chamada de casting exemplo:

https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/types/casting-and-type-conversions

Existem erros aqui e informações não verdadeiras, exemplo:

A linha

Int num = (int) "1" ; 

além do tipo inválido isso não funciona, o cast é referente ao tipo de dado se você fizer isso o erro será:

Compilation error (line 17, col 13): Cannot convert type ‘string’ to ‘int’

porque o dado tipo não é inteiro e sim um texto, cast é sobre o tipo de dado não é a intenção.

Correto:

public class Program
{
	public static void Main()
	{
		if (int.TryParse("1", out int c))
		{
			System.Console.WriteLine(c);
		}
	}
}

ou seja, o TryParse tem o fator de dizer se a conversão deu certo (true/false) e também exponha o valor para utilização posterior.

Essa é a melhor forma de converter e não ter exceção na sua aplicação.


O Convert também funciona mas, o valor realmente precisa ser o tipo que você quer, exemplo:

Functiona:

public class Program
{
	public static void Main()
	{
		int i = System.Convert.ToInt32("1");
		System.Console.WriteLine(i);
	}
}

Exceção

public class Program
{
	public static void Main()
	{
		int i = System.Convert.ToInt32("");
		System.Console.WriteLine(i);
	}
}

Unhandled exception. System.FormatException: Input string was not in a correct format.
at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, TypeCode type)
at System.Number.ParseInt32(ReadOnlySpan`1 value, NumberStyles styles, NumberFormatInfo info)
at System.Convert.ToInt32(String value)
at Program.Main()
Command terminated by signal 6

Ou seja, a sua resposta de um modo geral é inválida, não diz o correto e confunde mais do que ajuda.

Sobre Cast, exemplo válido:

public class Program
{
	public static void Main()
	{
		object c = 1;
		int d = (int)c;
		System.Console.WriteLine(d);
	}
}

O cast é sobre o valor contido em um object e a sua conversão é explicita, isso funciona porque o object c é um tipo inteiro e todas os tipos herdam de objeto por isso nesse caso funciona.

Se ficou alguma duvida @xsilva99 pode pergunta!