Converter tipos de dados

Concluído

Sugestão

Consulte a guia Texto e imagens para obter mais detalhes!

Como C# é fortemente tipado, por vezes é necessário converter explicitamente um valor de um tipo de dado para outro. Isto é especialmente importante ao trabalhar com input do utilizador, porque Console.ReadLine() devolve sempre texto (a string) — mesmo quando o utilizador escreve um número.

Porque é que a conversão é importante

Considere este cenário comum:

Console.Write("Enter your age: ");
string ageInput = Console.ReadLine();
int nextYear = ageInput + 1;    // ERROR! Can't add int to string

Para fazer contas com a entrada do utilizador, é preciso converter primeiro a cadeia num número.

Métodos de conversão

C# fornece Convert métodos para alterar valores entre tipos de dados:

Método Converte para Example Resultado
Convert.ToInt32() int Convert.ToInt32("42") 42
Convert.ToDecimal() decimal Convert.ToDecimal("19.99") 19.99m
Convert.ToDouble() duplo Convert.ToDouble("3.14") 3.14
Convert.ToString() cadeia (de caracteres) Convert.ToString(42) "42"

Aqui está como corrigir o cenário anterior:

Console.Write("Enter your age: ");
string ageInput = Console.ReadLine();
int age = Convert.ToInt32(ageInput);
int nextYear = age + 1;
Console.WriteLine($"Next year you'll be {nextYear}");

Podes tentar correr este código tu próprio no Editor de Código C#.

Métodos de análise sintática

Outra forma de converter cadeias em números é com os Parse métodos:

int age = int.Parse("25");
decimal price = decimal.Parse("19.99");
double average = double.Parse("87.5");

Tanto Convert.ToInt32() como int.Parse() fazem coisas semelhantes — use o estilo que preferir.

Conversão entre tipos numéricos

Para converter entre tipos numéricos (como de decimal para int), faça uma cast colocando o tipo de destino entre parênteses:

decimal price = 19.99m;
int wholePrice = (int)price;         // Casts to int: 19 (decimal dropped)
Console.WriteLine(wholePrice);       // Output: 19

Também podes lançar para manter a precisão decimal durante a divisão:

int first = 7;
int second = 2;
decimal result = (decimal)first / (decimal)second;
Console.WriteLine(result);           // Output: 3.5

O que acontece com conversões inválidas?

Se tentar converter um valor que não pode ser interpretado como um número, C# gera um erro:

int number = Convert.ToInt32("hello");    // ERROR: Input string was not in a correct format

Por agora, certifica-te apenas de que o valor pode ser convertido antes de tentares. Mais tarde, aprenderás a lidar com erros com elegância.