2009-06-05 20 views
31

Eventuali duplicati:
What is the difference between the following casts in c#?differenza di C# tra casting e come?

In C#, è un c'è differenza tra la fusione di un oggetto o utilizzando la parola chiave as? Speriamo che questo codice illustrerà quello che voglio dire ...

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

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

Grazie

:)

+0

vittima esatta di http: // StackOverflow. it/questions/702234/what-is-the-difference-between-the-following-casts-in-c e molti molti altri – annakata

+0

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

risposta

65

as sarà mai gettare un InvalidCastException. Invece, restituisce null se il cast fallisce (il che darebbe un NullReferenceException se obj nell'esempio non fosse un string).

+0

Il suo esempio non darebbe NullReferenceException. – Blindy

+2

@Blindy - sì, lo farebbe. Sta cercando di fare un ToUpper() su ciò che potenzialmente potrebbe essere un oggetto nullo. – rein

+0

Grazie, pensavo che potesse essere solo una scorciatoia! –

4

L'utilizzo di "come" non genera un'eccezione se l'oggetto non è una stringa. Invece restituirà null. Che nel tuo caso genererà comunque un'eccezione dato che stai facendo immediatamente riferimento a questo valore nullo.

7

Per quanto ne so!

L'utilizzo di "as" restituisce null se il "cast" non riesce dove il cast genererà un'eccezione se il cast fallisce.

14

Oltre InvalidCastException che è già accennato ...

as non funziona se il tipo di destinazione è un tipo di valore (se non è annullabile):

obj as int // compile time error.