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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.