La prima cosa da notare è che VB.NET non ha un analogo diretto al (type)instance
meccanismo di casting di C # . Ne parlo perché è utile come punto di partenza per confrontare i due operatori VB.NET (e sono operatori, non funzioni, anche se hanno la semantica delle funzioni).
DirectCast()
è più rigoroso dell'operatore di casting C #. Ti consente solo di lanciare quando l'oggetto che stai trasmettendo è già del tipo a cui stai trasmettendo. Credo che unbox ancora i tipi di valore, ma per il resto non eseguirà alcuna conversione. Quindi, ad esempio, non puoi trasmettere da short
a int
, come potresti fare con un (int)
cast C # . Ma puoi eseguire il cast da an IEnumerable
a un array, se la tua IEnumerable
variabile oggetto sottostante è davvero un file Array
. E ovviamente puoi eseguire il cast da Object
a qualsiasi cosa, supponendo che il tipo della tua istanza di oggetto sia davvero da qualche parte sotto il tuo tipo di cast nell'albero dell'ereditarietà.
Questo è desiderabile perché è molto più veloce . Ci sono meno conversioni e controlli del tipo che devono essere effettuati.
CType()
è meno rigoroso dell'operatore di casting C #. Farà cose che non puoi fare con un (int)
cast in stile semplice , come convertire una stringa in un numero intero. Ha la stessa potenza della chiamata Convert.To___()
in C #, dove ___
è il tipo di destinazione del cast.
Questo è desiderabile perché è molto potente. Tuttavia, questo potere va a scapito delle prestazioni; non è veloce come l' DirectCast()
operatore cast di C # o di C # perché potrebbe essere necessario fare un bel po 'di lavoro per completare il cast. Generalmente dovresti preferire DirectCast()
quando puoi.
Infine, ti sei perso un operatore di casting:, TryCast()
che è un analogo diretto as
dell'operatore di C # .