2009-06-05 13 views
31

Duplicar posibles:
What is the difference between the following casts in c#?C# diferencia entre fundición y como?

En C#, no es una diferencia entre emitan un objeto o usando la palabra clave as? Con suerte este código ilustrará lo que quiero decir ...

String text = "Hello hello"; 
Object obj = text; 

String originalCast = ((String)obj).ToUpper(); 
String originalAs = (obj as String).ToUpper(); 

Gracias

:)

+0

víctima exacta de http: // stackoverflow. com/questions/702234/what-is-the-difference-between-the-following-castts-in-c y muchos otros – annakata

+0

duplicate of http://stackoverflow.com/questions/2483/casting-newtype-vs- object-as-newtype – pirho

Respuesta

65

as nunca se tirará un InvalidCastException. En cambio, devuelve nulo si el molde falla (lo que le daría un NullReferenceException si obj en su ejemplo no fuera un string).

+0

Su ejemplo no daría NullReferenceException. – Blindy

+2

@Blindy - sí lo haría. Está intentando hacer un ToUpper() en lo que podría ser un objeto nulo. – rein

+0

¡Gracias, pensé que podría haber sido solo taquigrafía! –

4

El uso de 'como' no arrojará una excepción si el obj no es una cadena. En cambio, devolverá nulo. Que en su caso todavía arrojará una excepción ya que está haciendo referencia inmediatamente a este valor nulo.

7

¡Hasta donde yo sé!

El uso de 'como' dará como resultado nulo si el 'lanzamiento' falla cuando el lanzamiento arrojará una excepción si falla el lanzamiento.

14

Aparte de InvalidCastException que ya se ha mencionado ...

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

obj as int // compile time error. 
Cuestiones relacionadas