Digitare Casting in Visual Basic. NET

Fornito da Molly Pell, Senior Systems Analyst

Visual Basic.NET offre due opzioni per il casting.

  • CType: esegue il cast o converte un tipo in un altro tipo. Se i tipi non corrispondono, la coercizione può essere eseguita.
  • DirectCast: esegue il cast di un tipo in un altro tipo con prestazioni migliori rispetto a CType, ma non esegue la coercizione se i tipi non corrispondono.

Nota: CType include tutte le funzioni di conversione VB. Il nostro sito utilizza cookie tecnici e di terze parti per migliorare la tua esperienza di navigazione.

La differenza principale tra i due è che DirectCast funziona solo se il tipo specificato e il tipo di runtime dell’espressione sono gli stessi. Questa differenza appare solo quando si converte da un tipo di oggetto a un tipo di valore o si unboxing di un valore.

Ad esempio, la seguente operazione DirectCast avrà esito negativo perché il tipo in scatola dell’oggetto O non è un numero intero:

Dim O As Object = 1.5

Dim I As Integer = DirectCast(O, Integer) ‘ Causa un errore di runtime.

Dim I As Integer = CType ( O, Integer) ‘ Non causa un errore di runtime.

L’operazione DirectCast in questo esempio, d’altra parte, avrà successo:

Dim O As Object = 1

Dim I As Integer = DirectCast(O, Integer) ‘ Riesce.

Dim I As Integer = CType(O, Integer) ‘ Ha esito positivo, ma è più lento di DirectCast

Durante la conversione da un oggetto a un tipo di valore o unboxing, l’operatore DirectCast ha prestazioni migliori rispetto all’operatore CType. Il Visual Basic .NET compiler genera quattro righe di codice IL per DirectCast. Tuttavia, l’utilizzo di CType fa sì che il compilatore. NET di Visual Basic generi una chiamata a un metodo di conversione che supera le cento righe di codice IL. Questo metodo a sua volta chiama altri metodi. Nel codice critico delle prestazioni, la differenza può essere sostanziale. Se la coercizione è necessaria, tuttavia, è comunque necessario utilizzare l’operazione CType o eseguire la coercizione manualmente.

Per esempio:

Dim O Come Oggetto = 1.5

Dim f As Single = DirectCast(O Singola) ‘il Cast al tipo di runtime

Dim i As Integer = CType(f, Integer)’ CType è OK, qui, poiché questo
‘ cast non è unbox ‘f’

Conclusione

Quando il tipo di colata da un oggetto di tipo di un tipo di valore, o unboxing, si deve prima determinare se il tipo di coercizione è necessario. Se non è necessaria alcuna coercizione (ad esempio, il tipo boxed del valore è lo stesso del tipo specificato nell’espressione cast), utilizzare l’espressione DirectCast per aumentare le prestazioni dell’applicazione.

Questo suggerimento e più rilevato per voi con Total. NET Analyzer! Vedere FMS. NET Analyzer per ulteriori informazioni.