Operatore DirectCast (Visual Basic)
Introduce un'operazione di conversione dei tipi basata sull'ereditarietà o sull'implementazione.
Osservazioni:
DirectCast
non usa le routine helper di runtime di Visual Basic per la conversione, pertanto può offrire prestazioni leggermente migliori rispetto a CType
quando si esegue la conversione da e verso il tipo di dati Object
.
Si usa la parola chiave DirectCast
simile al modo in cui si usa la funzione CType e la parola chiave TryCast Operator. Specificare un'espressione come primo argomento e un tipo in cui convertirla come secondo argomento. DirectCast
richiede una relazione di ereditarietà o implementazione tra i tipi di dati dei due argomenti. Ciò significa che un tipo deve ereditare o implementare l'altro tipo.
Errori e operazioni non riuscite
DirectCast
genera un errore del compilatore se rileva che non esiste alcuna relazione di ereditarietà o implementazione. Tuttavia, la mancanza di un errore del compilatore non garantisce una conversione corretta. Se la conversione desiderata è ridotta, potrebbe non riuscire in fase di esecuzione. In questo caso, il runtime genera un errore InvalidCastException.
Parole chiave di conversione
Di seguito è riportato un confronto tra le parole chiave di conversione dei tipi.
Parola chiave | Tipo di dati | Relazione tra argomenti | Errore di runtime |
---|---|---|---|
CType Function | Qualsiasi tipo di dati | È necessario definire una conversione verso un tipo di dati più esteso o più piccolo | Genera InvalidCastException |
DirectCast |
Qualsiasi tipo di dati | Un tipo deve ereditare o implementare l'altro tipo | Genera InvalidCastException |
Operatore TryCast | Solo tipi di riferimento | Un tipo deve ereditare o implementare l'altro tipo | Restituisce Nothing |
Esempio
Nell'esempio seguente vengono illustrati due usi di DirectCast
, uno che ha esito negativo in fase di esecuzione e uno che ha esito positivo.
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)
Nell'esempio precedente il tipo di runtime di q
è Double
. CType
ha esito positivo perché Double
può essere convertito in Integer
. Tuttavia, il primo DirectCast
non riesce in fase di esecuzione perché il tipo di runtime di Double
non ha alcuna relazione di ereditarietà con Integer
, anche se esiste una conversione. Il secondo DirectCast
ha esito positivo perché converte da tipo Form a tipo Control, da cui Form eredita.