La prima cosa da notare è che VB.NET non ha un meccanismo di trasmissione analogico diretto al C (type)instance
. Ne parlo perché è utile usarlo come punto di partenza nel confronto tra i due operatori VB.NET (e sono operatori, non funzioni, anche se hanno semantica delle funzioni).
DirectCast()
è più rigido dell'operatore di casting C#. Ti consente di eseguire il cast solo quando l'elemento da trasmettere è già il tipo di trasmissione. Non farà alcuna conversione. Pertanto, ad esempio, non puoi eseguire il cast da breve a int, ad esempio con un cast di C# (int)
. Ma è possibile eseguire il cast da un oggetto IEnumerable a un array, se la variabile dell'oggetto IEnumerable
sottostante è in realtà un valore Array
. E ovviamente puoi lanciare da Object a qualsiasi cosa, assumendo che il tipo l'istanza dell'oggetto sia davvero sotto il tuo cast nell'albero di ereditarietà.
Ciò è auspicabile perché ciò lo rende più veloce. C'è un po 'meno di conversione e controllo del tipo che deve aver luogo.
CType()
è meno rigido dell'operatore di casting C#. Farà cose come convertire una stringa in un numero intero che non puoi fare con un semplice cast (int)
. Ha tutta la potenza di chiamare Convert.To___()
in C#, dove ___ è il tipo di destinazione del cast. Ciò è auspicabile perché è molto potente, ma la potenza arriva al costo delle prestazioni — non è veloce come l'operatore di cast di DirectCast() o C# perché ci potrebbe essere molto lavoro da fare per finire il cast.
Generalmente si dovrebbe preferire DirectCast()
quando è possibile.
Infine, hai perso un operatore di casting: TryCast()
, che è un analogo diretto all'operatore as
di C#.
fonte
2010-06-16 19:37:06
Duplicazione esatta di questo * Casting DataTypes con DirectCast, CType, TryCast * http://stackoverflow.com/questions/2703585/casting-datatypes-with-directcast-ctype-trycast – MarkJ
Possibile duplicato di [Casting DataTypes con DirectCast, CType, TryCast] (https: // StackOverflow.it/questions/2703585/casting-datatypes-with-directcast-ctype-trycast) – Imad