¿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:
-
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,doubleaint). 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" -
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
intadouble.// 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 devuelvenullsi 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. Devuelvetrueofalse. 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 }