as
kann nicht mit Werttypen (Nicht-Nullable-Typen) verwendet werden.
Für Referenztypen ...
expression as type
ist wirklich das gleiche wie
expression is type ? (type) expression : (type) null
außer dass expression
wird nur einmal ausgewertet.
In einer Anspielung auf Bill Clinton, von 'ist' in 'Ausdruck ist Typ', meine ich 'is'.
Grundsätzlich, wie die anderen Antworten anzeigen, bedeutet dies, dass die Rückgabe null ist, wenn der Cast fehlschlagen würde. Es wird jedoch auch null zurückgegeben, wenn die Umwandlung erfolgreich war, der Typ jedoch falsch ist.
ist hier ein etwas dummes Beispiel:
uint? u = 52;
int? i = (int?) u; // 'i' is now 52
aber
uint? u = 52;
object d = u;
int? i = d as int?;
Was ist der Wert von i? 52? Nee. Es ist null.
Warum das Objekt drin? Es stellte sich heraus, dass ich oben gelogen habe, als ich "wie" in Bezug auf "ist" erklärt habe.
beachten:
uint? u = 52;
int? i = (u is int?) ? (int?) u : (int?) null;
'i' jetzt Oops null
uint? u = 52;
int? i = u as int?;
ist. Compilerfehler Also, ich denke, die beiden Aussagen sind nicht genau gleich.
Kurz gesagt: is is is und so wie es auch ist. –
Nicht nur das, aber ich muss C# schreiben, die '?' wie Lisp verwendet Klammern. :-) – Justin