DirectCast-Operator (Visual Basic)
Führt einen Typkonvertierungsvorgang basierend auf vererbung oder Implementierung ein.
Bemerkungen
DirectCast
verwendet nicht die Visual Basic-Laufzeithilfsroutinen für die Konvertierung, sodass sie eine etwas bessere Leistung bieten kann als CType
beim Konvertieren in und vom Datentyp Object
.
Sie verwenden das DirectCast
-Schlüsselwort ähnlich der Verwendung der CType-Funktion und des TryCast-Operator-Schlüsselworts. Sie geben einen Ausdruck als erstes Argument und einen Typ an, in den er als zweites Argument konvertiert werden soll. DirectCast
erfordert eine Vererbungs- oder Implementierungsbeziehung zwischen den Datentypen der beiden Argumente. Dies bedeutet, dass ein Typ von dem anderen erben oder implementieren muss.
Fehler und Ausfälle
DirectCast
generiert einen Compilerfehler, wenn erkannt wird, dass keine Vererbungs- oder Implementierungsbeziehung vorhanden ist. Das Fehlen eines Compilerfehlers garantiert jedoch keine erfolgreiche Konvertierung. Wenn die gewünschte Konvertierung eingeschränkt wird, kann sie zur Laufzeit fehlschlagen. In diesem Fall löst die Laufzeit einen InvalidCastException-Fehler aus.
Konvertierungsschlüsselwörter
Ein Vergleich der Schlüsselwörter für die Typkonvertierung sieht wie folgt aus.
Schlüsselwort | Datentypen | Argumentbeziehung | Laufzeitfehler |
---|---|---|---|
CType Function | Beliebige Datentypen | Die erweiternde oder einschränkende Konvertierung muss zwischen den beiden Datentypen definiert werden | Löst InvalidCastException aus |
DirectCast |
Beliebige Datentypen | Ein Typ muss vom anderen Typ erben oder implementieren | Löst InvalidCastException aus |
TryCast-Operator | Nur Verweistypen | Ein Typ muss vom anderen Typ erben oder implementieren | Gibt Nothing zurück |
Beispiel
Das folgende Beispiel veranschaulicht zwei Verwendungen von DirectCast
, eine, die zur Laufzeit fehlschlägt, und eine, die erfolgreich ist.
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
Im vorherigen Beispiel ist die Laufzeit von q
Double
. CType
ist erfolgreich, da Double
in Integer
konvertiert werden kann. Der erste DirectCast
schlägt zur Laufzeit jedoch fehl, da der Laufzeittyp Double
keine Vererbungsbeziehung mit Integer
hat, auch wenn eine Konvertierung vorhanden ist. Die zweite DirectCast
ist erfolgreich, da er vom Typ Form in den Typ Control konvertiert wird, von dem Form geerbt wird.