Was ist der Unterschied zwischen der normalen Typumwandlung und der Verwendung des Schlüsselworts "AS" [duplizieren]

7
  

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"?

    
Ram 16.09.2010, 05:54
quelle

8 Antworten

18

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:

%Vor%     
Bennor McCarthy 16.09.2010, 05:55
quelle
7

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:

Ссылка

    
Eric Lippert 16.09.2010 06:10
quelle
1

as Casting wird eine Ausnahme werfen, während normale Casts können.

%Vor%     
Sly 16.09.2010 05:57
quelle
1

Normaler Cast kann eine IllegalTypeCast-Ausnahme zurückgeben, wobei% as in diesem Fall null zurückgibt.

    
quelle
1
%Vor%     
The King 16.09.2010 05:58
quelle
0

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.

    
Danny Chen 16.09.2010 06:17
quelle
0

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.

    
Øyvind Bråthen 16.09.2010 06:21
quelle
0

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

%Vor%

Hoppla! Compilerfehler Also, ich denke, die beiden Aussagen sind nicht genau die gleichen.

    
Justin 16.09.2010 06:08
quelle

Tags und Links