Converter tipos de dados

Concluído(a)

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.