Differenze nell'uso di CType e DirectCast in VB.NET

di Riccardo Golia, in UserScript, ASP.NET, VB.NET,

In VB.NET esistono due keyword che permettono di ottenere la conversione tra i tipi di dato, entrambe caratterizzate dalla stessa sintassi che prevede due argomenti: il primo è l'oggetto da convertire, il secondo è il tipo di dato di destinazione.

Apparentemente tra i due metodi di conversione non sembrano esserci grosse differenze, ma in realtà non è così!

CType cerca sempre di effettuare la conversione (esempio classico: una stringa contenente un numero viene convertita), DirectCast funziona solo se l'argomento sorgente può essere convertito nel tipo di destinazione, sollevando un'eccezione di tipo System.InvalidCastException in caso contrario.

Dim myObject As Object
Dim i As Integer
Dim j As Integer
 
myObject = Byte.MaxValue 'Equivale a 255

i = CType(myObject, Integer) 'Funziona
j = DirectCast(myObject, Integer) 'Non funziona
 
myObject = "255"
 
i = CType(myObject, Integer) 'Funziona
j = DirectCast(myObject, Integer) 'Non funziona
 
myObject = 255
 
i = CType(myObject, Integer) 'Funziona
j = DirectCast(myObject, Integer) 'Funziona


Pertanto è necessario utilizzare CType quando si usano come argomenti tipi di valore, dato che DirectCast per funzionare correttamente necessita unicamente di tipi di riferimento.

Viceversa CType risulta essere più lento rispetto a DirectCast, per cui sarebbe consigliabile utilizzare quest'ultimo, per esempio, nel caso in cui si voglia effettuare il cast di un controllo in funzione del suo identificatore e, in generale, quando si esegue la conversione di una variabile di una superclasse (o classe base) in una variabile di una classe derivata.

DirectCast(myContainerControl.FindControl("lblHello"), Label).Text = "Hello World!" 'Meglio usare DirectCast

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi