Mögliche Duplikate:
Direktcasting vs 'as' Betreiber?
Casting: (NewType) vs. Objekt als NewType
Was ist der Unterschied zwischen normaler Typumwandlung und Verwendung des Schlüsselworts "AS"?
Die Verwendung von as
führt zu einem fehlerhaften Fehler, wenn das Objekt den falschen Typ hat und der resultierende Wert null ist, wobei eine normale Umwandlung eine InvalidCastException auslösen würde:
Die Anwendungsfälle der beiden Operatoren sind oberflächlich ähnlich, aber semantisch ziemlich verschieden. Ein Cast teilt dem Leser mit: "Ich bin mir sicher, dass diese Konvertierung legal ist und ich bin bereit, eine Runtime-Ausnahme zu machen, wenn ich falsch liege". Der "as" -Operator teilt mit: "Ich weiß nicht, ob diese Konvertierung legal ist oder nicht; wir werden es versuchen und sehen, wie es läuft".
Weitere Informationen zu diesem Thema finden Sie in meinem Artikel zum Thema:
Normaler Cast kann eine IllegalTypeCast-Ausnahme zurückgeben, wobei% as
in diesem Fall null
zurückgibt.
Sie erhalten keine Conversion-Ausnahme, wenn Sie das Schlüsselwort "as" verwenden. Das Ergebnis der Konvertierung ist null
, wenn Sie eine ungültige Konvertierung versuchen.
Implizit / explizit konvertieren kann zwischen Klassen / Schnittstellen mit erben / implementieren Beziehungen verwendet werden, andernfalls wird es einen Kompilierungsfehler geben. Siehe Beispiel:
%Vor%Eine andere Situation von implizit / explizit konvertieren ist, gibt es keine Beziehung zwischen Klasse A und B, aber Sie schreiben ein implizit / explizit Betreibe dich selbst.
Auch, wie nur mit Referenztypen verwendet werden kann. Das ist eigentlich ziemlich logisch, denn wenn die Konvertierung fehlschlägt, gibt sie false zurück, und das ist kein möglicher Wert für einen Werttyp.
Daher muss für Werttypen die normale Typumwandlung verwendet werden.
as
kann nicht mit Werttypen verwendet werden (nicht nullbare Typen).
Für Referenztypen ...
%Vor%ist wirklich dasselbe wie
%Vor%, außer dass expression
nur einmal ausgewertet wird.
In einer Kopfnote zu Bill Clinton, mit 'ist' in 'Ausdruck ist Typ', meine ich ' ist ".
Grundsätzlich bedeutet das, wie die anderen Antworten anzeigen, dass der Rückgabewert null ist, wenn der Cast fehlschlägt. Es wird jedoch auch null zurückgegeben, wenn die Umwandlung erfolgreich war, der Typ jedoch falsch ist.
Hier ist ein etwas albernes Beispiel:
%Vor%aber
%Vor%Was ist der Wert von ich? 52? Nee. Es ist null.
Warum ist das Objekt da drin? Es stellte sich heraus, dass ich oben gelogen habe, als ich erklärt habe "wie" in Bezug auf "ist".
Beachten Sie:
%Vor% 'i' ist jetzt null
Hoppla! Compilerfehler Also, ich denke, die beiden Aussagen sind nicht genau die gleichen.