Dominando la Conversión de Tipos en C#: Implícita, Explícita, Parse y Métodos Convert
Dominando la Conversión de Tipos en C#
Aprende a convertir entre tipos de datos en C#: desde conversiones implícitas y explícitas hasta las potentes APIs Parse y Convert, con ejemplos claros y mejores prácticas.
La conversión de tipos —cambiar un valor de un tipo de dato a otro— es una habilidad fundamental en C#. Entender cuándo y cómo usar cada método de conversión asegura que tu código sea seguro y eficiente.
En C#, las conversiones se dividen en dos categorías principales:
- Conversiones de Tipo Implícitas
- Conversiones de Tipo Explícitas (casting)
1. Conversión de Tipo Implícita en C#
Las conversiones implícitas las realiza automáticamente el compilador cuando no puede ocurrir pérdida de datos. Son seguras y no requieren sintaxis adicional.
Escenarios típicos implican convertir un tipo numérico menor a uno mayor —p. ej., int a double— para que el valor pueda representarse sin truncamiento.
Ejemplo: Conversión de Tipo Implícita
using System; namespace MiAplicacion { class Programa { static void Main(string[] args) { int numInt = 500; // Conversión implícita double numDouble = numInt; Console.WriteLine($"Valor numInt: {numInt}"); Console.WriteLine($"Tipo numInt: {numInt.GetType()}"); Console.WriteLine($"Valor numDouble: {numDouble}"); Console.WriteLine($"Tipo numDouble: {numDouble.GetType()}"); Console.ReadLine(); } } }
Salida
Valor numInt: 500 Tipo numInt: System.Int32 Valor numDouble: 500 Tipo numDouble: System.Double
Como double tiene mayor capacidad, el compilador promueve el valor int de forma segura sin riesgo de desbordamiento.
Nota: Las conversiones implícitas nunca pierden datos, pero aumentan el tamaño del tipo resultante.
2. Conversión de Tipo Explícita (Casting) en C#
Las conversiones explícitas, o casts, se usan al convertir de un tipo mayor a uno menor o entre tipos no relacionados. El desarrollador debe señalar la intención, y el compilador puede advertir si la conversión podría descartar datos.
Ejemplo: Conversión de Tipo Explícita
using System; namespace MiAplicacion { class Programa { static void Main(string[] args) { double numDouble = 1.23; int numInt = (int)numDouble; // Cast explícito Console.WriteLine($"Valor double original: {numDouble}"); Console.WriteLine($"Valor int convertido: {numInt}"); Console.ReadLine(); } } }
Salida
Valor double original: 1.23 Valor int convertido: 1
El cast trunca la parte fraccionaria, por lo que 1.23 se convierte en 1. Si la precisión importa, considera usar métodos de redondeo antes de castear.
Nota: El casting también se denomina conversión de tipo.
3. Convirtiendo Cadenas con Parse()
Al convertir de string a un tipo numérico, int.Parse, double.Parse, etc., proporcionan un enfoque directo y seguro en tipos.
Ejemplo: Usando int.Parse
using System; namespace Conversion { class Programa { static void Main(string[] args) { string n = "100"; int a = int.Parse(n); Console.WriteLine($"Valor string original: {n}"); Console.WriteLine($"Valor int convertido: {a}"); Console.ReadLine(); } } }
Salida
Valor string original: 100 Valor int convertido: 100
Intentar parsear una cadena no numérica, como "prueba", lanzará una FormatException. En código de producción, envuelve la llamada en try-catch o usa int.TryParse para manejar errores con elegancia.
4. La Clase Convert
La clase estática Convert ofrece un amplio conjunto de métodos para convertir entre muchos tipos de datos, a menudo realizando comprobaciones necesarias internamente.
| Método | Descripción |
|---|---|
ToBoolean() | Convierte un valor a bool |
ToChar() | Convierte un valor a char |
ToDouble() | Convierte un valor a double |
ToInt16() | Convierte un valor a int de 16 bits |
ToString() | Convierte un valor a string |
A continuación, ejemplos ilustrativos que cubren conversiones comunes.
Ejemplo: int → string y double
using System; namespace Conversion { class Programa { static void Main(string[] args) { int num = 100; Console.WriteLine($"Valor int: {num}"); string str = Convert.ToString(num); Console.WriteLine($"Valor string: {str}"); double dbl = Convert.ToDouble(num); Console.WriteLine($"Valor double: {dbl}"); Console.ReadLine(); } } }
Salida
Valor int: 100 Valor string: 100 Valor double: 100
Ejemplo: string ↔ double
using System; namespace Conversion { class Programa { static void Main(string[] args) { string str = "99.99"; Console.WriteLine($"Valor string original: {str}"); double dbl = Convert.ToDouble(str); Console.WriteLine($"Valor double convertido: {dbl}"); double num = 88.9; Console.WriteLine($"Valor double original: {num}"); string newStr = Convert.ToString(num); Console.WriteLine($"Valor string convertido: {newStr}"); Console.ReadLine(); } } }
Salida
Valor string original: 99.99 Valor double convertido: 99.99 Valor double original: 88.9 Valor string convertido: 88.9
Ejemplo: int → bool
using System; namespace Conversion { class Programa { static void Main(string[] args) { int num1 = 0; int num2 = 1; bool bool1 = Convert.ToBoolean(num1); bool bool2 = Convert.ToBoolean(num2); Console.WriteLine($"Valor booleano de 0 es: {bool1}"); Console.WriteLine($"Valor booleano de 1 es: {bool2}"); Console.ReadLine(); } } }
Salida
Valor booleano de 0 es: False Valor booleano de 1 es: True
Nota: En C#, 0 se interpreta como false; cualquier entero no cero evalúa a true.
Dominando estas técnicas de conversión, puedes escribir código que sea tanto seguro en tipos como expresivo, reduciendo errores en tiempo de ejecución y mejorando la legibilidad.
Lenguaje C
- ASTM A1018 Grado CS Tipo B: Especificaciones de Acero Bajo en Carbono
- ASTM A424 Grado Tipo II: Especificaciones y Rendimiento del Acero
- ASTM A424 Grado Tipo I: Propiedades Clave y Rendimiento
- ASTM A792 Grado CS Tipo A – Propiedades y Especificaciones Detalladas
- Tubería ASTM A53 Grado A Tipo E – Especificaciones y Propiedades Clave
- Tubería ASTM A53 Grado A Tipo S – Especificaciones y Propiedades Clave
- Acero ASTM A792 Grado CS Tipo C – Propiedades y Especificaciones para Chapas Revestidas
- Dominando conversión y casting de tipos en Python: Guía completa
- Dominando Números, Conversión de Tipos y Matemáticas en Python
- Dominando el Casting de Tipos en Java: Desde Ensanchamiento hasta Estrechamiento y Más Allá
- Dominando Genéricos en Java: Simplifica Ordenación y Mejora Seguridad de Tipos