La première chose à noter est que VB.NET n'a pas d'analogue direct au mécanisme de coulée (type)instance
de C#. Je soulève cela car il est utile de l'utiliser comme point de départ pour comparer les deux opérateurs VB.NET (et ce sont des opérateurs, pas des fonctions, même s'ils ont une sémantique de fonction).
DirectCast()
est plus stricte que l'opérateur de coulée C#. Il ne vous permet de lancer que lorsque l'élément en cours de diffusion est déjà le type que vous utilisez. Il ne fera aucune conversion. Ainsi, par exemple, vous ne pouvez pas passer de court à int, comme vous le feriez avec une distribution C# (int)
. Mais vous pouvez passer d'un IEnumerable à un tableau, si votre variable objet IEnumerable
sous-jacente est vraiment Array
. Et bien sûr, vous pouvez passer d'un objet à n'importe quoi, en supposant que le type de votre instance d'objet se trouve réellement en dessous de votre type de cast dans l'arbre d'héritage.
Ceci est souhaitable car cela le rend plus rapide . Il y a un peu moins de conversion et de vérification de type qui doit avoir lieu.
CType()
est moins stricte que l'opérateur de coulée C#. Il va faire des choses comme convertir une chaîne en un nombre entier que vous ne pouvez pas faire avec un simple (int)
cast. Il a autant de pouvoir que d'appeler Convert.To___()
en C#, où le ___ est le type cible de votre distribution. Ceci est souhaitable car il est très puissant, mais cette puissance se fait au détriment des performances. Ce n'est pas aussi rapide que l'opérateur de distribution de DirectCast() ou C# car il pourrait y avoir beaucoup de travail à faire pour terminer la distribution.
Généralement, vous devriez préférer DirectCast()
lorsque vous le pouvez. Enfin, vous avez manqué un opérateur de casting: TryCast()
, qui est un analogue direct de l'opérateur as
de C#.
double exact de ce casting de * DataTypes avec DirectCast, CType, TryCast * http://stackoverflow.com/questions/2703585/casting-datatypes-with-directcast-ctype-trycast – MarkJ
double possible de [Coulée DataTypes avec DirectCast, CType, TryCast] (https: // stackoverflow.com/questions/2703585/casting-datatypes-avec-directcast-ctype-trycast) – Imad