Convertir tipos de datos

Completados

Dado que C# es de tipado fuerte, a veces es necesario convertir explícitamente un valor de un tipo de datos a otro. Esto es especialmente importante cuando se trabaja con la entrada del usuario, ya que Console.ReadLine() siempre devuelve texto (un string) , incluso cuando el usuario escribe un número.

¿Por qué importa la conversión?

Considere este escenario común:

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

Para hacer matemáticas con la entrada del usuario, primero debe convertir la cadena en un número.

Métodos de conversión

C# proporciona Convert métodos para cambiar valores entre tipos de datos:

Método Convierte en Example Resultado
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() cadena Convert.ToString(42) "42"

Aquí se muestra cómo corregir el escenario 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}");

Puede intentar ejecutar este código usted mismo en el Editor de código de C#.

Análisis de métodos

Otra manera de convertir cadenas en números es con los 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() sirven para cosas similares; usa el estilo que prefieras.

Conversión entre tipos numéricos

Para convertir entre tipos numéricos (como decimalint), use una conversión colocando el tipo de destino entre paréntesis:

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

También puede convertir para mantener la precisión decimal durante la división:

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

¿Qué ocurre con conversiones no válidas?

Si intenta convertir un valor que no se puede interpretar como un número, C# produce un error:

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

Por ahora, asegúrese de que el valor se puede convertir antes de intentarlo. Más adelante, aprenderá a gestionar los errores correctamente.