Operatore DirectCast (Visual Basic)
Introduce un'operazione di conversione dei tipi basata sull'ereditarietà o sull'implementazione.
Note
Per la conversione DirectCast non utilizza le routine di supporto di runtime di Visual Basic, per poter garantire prestazioni migliori rispetto a CType durante la conversione da e verso il tipo di dati Object.
È possibile utilizzare la parola chiave DirectCast analogamente a Funzione CType (Visual Basic) e alla parola chiave Operatore TryCast (Visual Basic). Viene specificata un'espressione come primo argomento e un tipo per la relativa conversione come secondo argomento. DirectCast richiede una relazione di ereditarietà o di implementazione tra tipi di dati di due argomenti. Ciò significa che un tipo deve ereditare dall'altro tipo o implementarlo.
Condizioni di errore
Se non viene rilevata alcuna relazione di ereditarietà o implementazione, DirectCast genera un errore del compilatore. L'assenza di errori del compilatore non garantisce tuttavia la riuscita della conversione. Se la conversione desiderata è verso un tipo di dati più piccolo, è possibile che l'operazione non riesca 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 |
Tipi di dati |
Relazione degli argomenti |
Errore di runtime |
Qualsiasi tipo di dati |
La conversione verso un tipo di dati più grande o più piccolo deve essere definita tra i due tipi di dati |
Genera InvalidCastException |
|
DirectCast |
Qualsiasi tipo di dati |
Uno dei tipi deve ereditare dall'altro o implementarlo |
Genera InvalidCastException |
Solo tipi di riferimento |
Uno dei tipi deve ereditare dall'altro o implementarlo |
Restituisce Nothing (Visual Basic) |
Esempio
Nell'esempio riportato di seguito vengono illustrati due utilizzi di DirectCast, uno con esito negativo in fase di esecuzione e un altro con 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 q è Double. CType ha esito positivo perché è possibile convertire Double in Integer. Tuttavia, il primo DirectCast ha esito negativo in fase di esecuzione poiché il tipo di Double in fase di esecuzione non presenta alcuna relazione di ereditarietà con Integer, anche in presenza di una conversione. Il secondo DirectCast ha esito positivo poiché esegue la conversione dal tipo Form al tipo Control, dal quale Form eredita.