Converter tipos de dados
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.