Share via


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.

Vedi anche