C # diferentes formas de lanzar – (T) obj vs obj como T

Posible duplicado:
casting vs usando la palabra clave ‘as’ en el CLR

He visto dos formas diferentes de lanzar en C #.

Por ejemplo:

MyObj foo = (MyObj) bar; // this is what I see most of the times MyObj foo = bar as MyObj; // I do see this sometimes 
  • Entonces, ¿cuál es la diferencia básica?
  • ¿Cuáles son los nombres propios para el casting de style 1 y style 2 ?
  • ¿Cómo decido cuándo usar qué?
  • ¿Hay algún problema importante de rendimiento?
  • ¿Hay algo más que deba saber sobre este tema?

Muchas gracias por mirar esto 🙂

El primero (un lanzamiento “directo” o “estilo C”) lanza una excepción si el lanzamiento no es válido. También es la única forma de realizar la conversión de tipo real en el objeto. (Tenga en cuenta que la conversión de tipos es diferente de la conversión, porque la conversión simplemente cambia el tipo de la variable , mientras que la conversión de tipos le da un * tipo de objeto diferente).

El segundo (sin nombre particular, aunque puede llamarlo “try cast” como se llama en VB.NET) se evalúa como null lugar de lanzar una InvalidCastException . (Debido a este comportamiento solo funciona para tipos de referencia).

No hay problemas importantes de rendimiento en comparación entre sí.

Se usa solo si espera que su resultado no sea válido. De lo contrario, utilice el primero.


Por cierto, MSDN podría ser útil para partes de su pregunta:

El operador as es como una operación de fundición. Sin embargo, si la conversión no es posible, devuelve null lugar de generar una excepción. Considera la siguiente expresión:

 expression as type 

Es equivalente a la siguiente expresión, excepto que la expresión se evalúa solo una vez.

 expression is type ? (type)expression : (type)null 

Tenga en cuenta que el operador as solo realiza conversiones de referencia y conversiones de boxeo. El operador as no puede realizar otras conversiones, como las conversiones definidas por el usuario, que deberían realizarse utilizando expresiones de conversión.