DirectCast-operator (Visual Basic)
Introducerar en typkonverteringsåtgärd baserat på arv eller implementering.
Kommentarer
DirectCast
använder inte Visual Basic-hjälprutinerna för körning för konvertering, så det kan ge något bättre prestanda än CType
när du konverterar till och från datatypen Object
.
Du använder nyckelordet DirectCast
på samma sätt som du använder CType-funktionen och nyckelordet TryCast-operator . Du anger ett uttryck som det första argumentet och en typ att konvertera det till som det andra argumentet. DirectCast
kräver en arvs- eller implementeringsrelation mellan datatyperna för de två argumenten. Det innebär att en typ måste ärva från eller implementera den andra.
Fel och fel
DirectCast
genererar ett kompilatorfel om det upptäcker att det inte finns någon arvs- eller implementeringsrelation. Men avsaknaden av ett kompilatorfel garanterar inte en lyckad konvertering. Om den önskade konverteringen minskar kan den misslyckas vid körning. Om detta händer utlöser körningen ett InvalidCastException fel.
Konverteringsnyckelord
En jämförelse av nyckelorden för typkonvertering är följande.
Nyckelord | Datatyper | Argumentrelation | Körningsfel |
---|---|---|---|
CType-funktion | Alla datatyper | Utvidga eller begränsa konverteringen måste definieras mellan de två datatyperna | Kastar InvalidCastException |
DirectCast |
Alla datatyper | En typ måste ärva från eller implementera den andra typen | Kastar InvalidCastException |
TryCast-operator | Endast referenstyper | En typ måste ärva från eller implementera den andra typen | Returnerar ingenting |
Exempel
I följande exempel visas två användningsområden för DirectCast
, en som misslyckas vid körning och en som lyckas.
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)
I föregående exempel är Double
körningstypen q
. CType
lyckas eftersom Double
kan konverteras till Integer
. Den första DirectCast
misslyckas dock vid körning eftersom körningstypen inte Double
har någon arvsrelation med Integer
, även om det finns en konvertering. Den andra DirectCast
lyckas eftersom den konverterar från typ Form till typ Control, från vilken Form ärver.