Convertir tipos de datos
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.