DirectCast-operator (Visual Basic)
Introduceert een typeconversiebewerking op basis van overname of implementatie.
Opmerkingen
DirectCast
maakt geen gebruik van de Runtime-helperroutines van Visual Basic voor conversie, zodat deze enigszins betere prestaties kan bieden dan CType
bij het converteren naar en van het gegevenstype Object
.
U gebruikt het DirectCast
trefwoord dat vergelijkbaar is met de manier waarop u de CType-functie en het trefwoord TryCast Operator gebruikt. U geeft een expressie op als het eerste argument en een type waarnaar u deze wilt converteren als het tweede argument. DirectCast
vereist een overname- of implementatierelatie tussen de gegevenstypen van de twee argumenten. Dit betekent dat het ene type moet overnemen van of het andere moet implementeren.
Fouten en fouten
DirectCast
genereert een compilerfout als wordt gedetecteerd dat er geen overname- of implementatierelatie bestaat. Maar het ontbreken van een compilerfout garandeert geen geslaagde conversie. Als de gewenste conversie wordt beperkt, kan deze tijdens de uitvoering mislukken. Als dit gebeurt, genereert de runtime een InvalidCastException fout.
Conversietrefwoorden
Een vergelijking van de trefwoorden voor typeconversie is als volgt.
Trefwoord | Data types | Argumentrelatie | Runtimefout |
---|---|---|---|
CType, functie | Alle gegevenstypen | Verbreking of narrowing-conversie moet worden gedefinieerd tussen de twee gegevenstypen | Gooit InvalidCastException |
DirectCast |
Alle gegevenstypen | Het ene type moet overnemen van of het andere type implementeren | Gooit InvalidCastException |
TryCast-operator | Alleen referentietypen | Het ene type moet overnemen van of het andere type implementeren | Retourneert niets |
Opmerking
In het volgende voorbeeld ziet u twee toepassingen van DirectCast
, één die mislukt tijdens de uitvoering en één die slaagt.
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)
In het voorgaande voorbeeld is het runtimetype q
.Double
CType
slaagt omdat Double
kan worden geconverteerd naar Integer
. De eerste DirectCast
mislukt echter tijdens de uitvoering omdat het uitvoeringstype van Double
het type overname geen overnamerelatie heeft, Integer
ook al bestaat er een conversie. De tweede DirectCast
slaagt omdat het wordt geconverteerd van type Form naar type Control, van waaruit Form wordt overgenomen.