Saltar al contenido

Es lo que es y como es: Usando el es y como operadores en C#

Tomemos el siguiente código como ejemplo.

123456789101112131415161718 usando el sistema;namespace asitis{publicclassStudent{}clase itisas {estaticvoidMain(string[] args){Student s =newStudent();object c = s;string r =(string)c; Console.ReadKey();;}}}

csharp

Es lo que es y como es: Usando el es y como operadores en C#
Es lo que es y como es: Usando el es y como operadores en C#

Tenemos una clase vacía llamada Student, y si escribiéramos este código en un IDE como Visual Studio, no obtendríamos ningún aviso de la excepción entrante que ocurre cuando compilamos y ejecutamos la aplicación. Este tipo de error ocurre en tiempo de ejecución.

1Sistema.InvalidCastExcepción: $0027Incapaz de lanzar un objeto de tipo $0027asitis.Student$0027 a tipo $0027System.String$0027.$0027

bash

No hay ninguna indicación para el compilador que impida la compilación porque intentamos fundir un tipo de objeto en un tipo incompatible.

¿Qué podemos hacer al respecto? El primer y más común enfoque es el bloque de prueba. El primer intento de la mayoría de los desarrolladores sería envolver el código potencialmente crítico y manejar la excepción cuando ocurra.

Eso se vería algo así:

12345678910111213141516171819202122 usando el sistema;namespace asitis{publicclassStudent{}class itisas {estaticvoidMain(string[] args){Student s =newStudent();object c = s;try{string r =(string)c;}catch{ Console.WriteLine($"No se puede poner {nombre(c)} como cadena!");} Console.ReadKey();;}}}

csharp

Después de ejecutar el código, no obtendremos una excepción como antes, pero obtendremos la siguiente salida:

Esta solución es perfectamente viable, sin embargo, en una aplicación grande esto haría que la aplicación fuera más inestable y más difícil de leer o mantener para los desarrolladores.

¡Debe haber una mejor manera!