C # diferencia entre el casting y como?

Posible duplicado:
¿Cuál es la diferencia entre los siguientes lanzamientos en c #?

En C #, ¿hay una diferencia entre lanzar un objeto o usar la palabra clave as ? Esperemos que este código ilustre lo que quiero decir …

 String text = "Hello hello"; Object obj = text; String originalCast = ((String)obj).ToUpper(); String originalAs = (obj as String).ToUpper(); 

Gracias

🙂

as nunca lanzará una InvalidCastException . En su lugar, devuelve nulo si la conversión falla (lo que le daría una NullReferenceException si obj en su ejemplo no fuera una string ).

Aparte de InvalidCastException que ya se mencionó …

as no funcionará si el tipo de destino es un tipo de valor (a menos que sea anulable):

 obj as int // compile time error. 

¡Por lo que sé!

El uso de ‘como’ devolverá el valor nulo si el ‘lanzamiento’ falla cuando el lanzamiento arrojará una excepción si el lanzamiento falla.

El uso de ‘como’ no generará una excepción si el objeto no es una cadena. En su lugar, se devolverá nulo. Lo que en su caso aún generará una excepción, ya que está haciendo referencia de inmediato a este valor nulo.