La prima cosa da notare è che VB.NET non ha un analogo diretto al (type)instancemeccanismo 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 shorta int, come potresti fare con un (int)cast C # . Ma puoi eseguire il cast da an IEnumerablea un array, se la tua IEnumerablevariabile oggetto sottostante è davvero un file Array. E ovviamente puoi eseguire il cast da Objecta 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 asdell'operatore di C # .