Junior
¿Qué tipos de conversión de tipos existen en C#?
sobes.tech AI
Respuesta de la IA
En C# existen dos tipos principales de conversión de tipos: explícita e implícita.
Conversión implícita
Ocurre automáticamente cuando el compilador está seguro de que la conversión es segura y no provocará pérdida de datos. Por ejemplo, de un tipo con un rango menor a uno con un rango mayor.
// Conversión implícita de int a long
int i = 100;
long l = i;
Conversión explícita
Requiere indicar en el código el operador de conversión ((tipo)) y se usa cuando la conversión puede provocar pérdida de datos o lanzar una excepción. Es necesaria al convertir de un tipo con un rango mayor a uno con un rango menor o entre tipos no relacionados.
// Conversión explícita de double a int
double d = 123.45;
int i = (int)d; // La parte decimal se descarta
// Conversión explícita de object a string
object obj = "Hello";
string s = (string)obj;
// Conversión usando los operadores as y is
object objAs = "World";
string sAs = objAs as string; // Retorna null si la conversión no es posible
if (objAs is string) // Verifica si el objeto es de tipo string
{
string sIs = (string)objAs;
}
Comparación de conversión explícita, as y is
| Operación | Descripción | Error en caso de fallo |
|---|---|---|
(Tipo) expresión |
Conversión explícita. Requiere coincidencia exacta de tipo. | InvalidCastException |
expresión as Tipo |
Intenta convertir el tipo. Solo funciona con tipos referenciados y tipos que permiten null. | Retorna null |
expresión is Tipo |
Verifica si la expresión puede convertirse al tipo especificado. | Valor booleano (true/false) |
Conversiones personalizadas
El desarrollador puede definir sus propios operadores de conversión explícita e implícita para tipos personalizados, usando las palabras clave implicit y explicit.
// Ejemplo de conversión implícita personalizada
public class Inches
{
public int Value { get; set; }
public static implicit operator Millimeters(Inches i)
{
return new Millimeters { Value = i.Value * 25 };
}
}
public class Millimeters
{
public int Value { get; set; }
}
// Uso
Inches inches = new Inches { Value = 10 };
Millimeters mm = inches; // Conversión implícita
// Ejemplo de conversión explícita personalizada
public class Kilograms
{
public int Value { get; set; }
}
public class Pounds
{
public int Value { get; set; }
public static explicit operator Kilograms(Pounds p)
{
return new Kilograms { Value = (int)(p.Value / 2.20462) };
}
}
// Uso
Pounds pounds = new Pounds { Value = 100 };
Kilograms kg = (Kilograms)pounds; // Conversión explícita