Converter tipos de dados
Dica
Consulte a guia Texto e imagens para obter mais detalhes!
Como C# é fortemente tipado, às vezes você precisa converter de forma explícita um valor de um tipo de dados para outro. Isso é especialmente importante ao trabalhar com a entrada do usuário, pois Console.ReadLine() sempre retorna texto (um string)— mesmo quando o usuário digita um número.
Por que a conversão importa
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 matemática com a entrada do usuário, você precisa converter a cadeia de caracteres em um número primeiro.
Converter métodos
O C# fornece Convert métodos para alterar valores entre tipos de dados:
| Método | Converte para | Exemplo | Result |
|---|---|---|---|
Convert.ToInt32() |
int | Convert.ToInt32("42") |
42 |
Convert.ToDecimal() |
decimal | Convert.ToDecimal("19.99") |
19.99m |
Convert.ToDouble() |
double | Convert.ToDouble("3.14") |
3.14 |
Convert.ToString() |
cadeia | Convert.ToString(42) |
"42" |
Veja 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}");
Você pode tentar executar esse código por conta própria no Editor de Código em C#.
Métodos de análise
Outra maneira de converter cadeias de caracteres 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");
Ambos Convert.ToInt32() e int.Parse() fazem coisas semelhantes — use o estilo que preferir.
Conversão entre tipos numéricos
Para converter entre tipos numéricos (como decimal para int), use uma conversão 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
Você também pode converter 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 você tentar converter um valor que não pode ser interpretado como um número, O C# gerará um erro:
int number = Convert.ToInt32("hello"); // ERROR: Input string was not in a correct format
Por enquanto, apenas verifique se o valor pode ser convertido antes de tentar. Posteriormente, você aprenderá a lidar com erros normalmente.