Sobes.tech
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:

  1. Conversión explícita (Explicit conversion): Requiere el uso del operador de conversión (tipo). Se usa cuando el compilador no puede realizar la conversión de forma segura automáticamente, por ejemplo, al convertir de una clase base a una derivada o de un tipo con mayor precisión a uno con menor precisión (por ejemplo, double a int). Esto puede llevar a pérdida de datos o errores en tiempo de ejecución (InvalidCastException).

    // Conversión explícita de double a int
    double d = 123.45;
    int i = (int)d; // i será igual a 123
    
    // Conversión explícita de un objeto a un tipo específico
    object obj = "Hello";
    string s = (string)obj; // s será igual a "Hello"
    
  2. Conversión implícita (Implicit conversion): Se realiza automáticamente por el compilador cuando la conversión es conocida y segura, es decir, sin pérdida de datos. Por ejemplo, convertir de int a double.

    // Conversión implícita de int a double
    int x = 10;
    double y = x; // y será igual a 10.0
    
    // Conversión implícita de una clase derivada a una base
    class Base {}
    class Derived : Base {}
    
    Derived derivedObj = new Derived();
    Base baseObj = derivedObj; // Conversión implícita
    

Además, existen los operadores as y is, que también están relacionados con la conversión de tipos, pero con características específicas:

  • Operador as: Realiza la conversión de tipo si es posible y devuelve null si no se puede convertir. No genera excepción InvalidCastException. Solo se usa con tipos de referencia y tipos que permiten Nullable.

    // Uso del operador as
    object obj2 = "World";
    string s2 = obj2 as string; // s2 será igual a "World"
    
    object obj3 = 123;
    string s3 = obj3 as string; // s3 será null
    
  • Operador is: Verifica si un objeto es una instancia de un tipo específico o de uno derivado de él. Devuelve true o false. En las últimas versiones de C# puede usarse con patrones (pattern matching) para verificar y convertir al mismo tiempo.

    // Uso del operador is para verificar el tipo
    object obj4 = "Example";
    if (obj4 is string)
    {
        // Acciones si el objeto es una cadena
    }
    
    // Uso de is con patrón (Pattern matching)
    if (obj4 is string str)
    {
        // str está disponible aquí como una cadena
    }