La première chose à noter est que VB.NET n'a pas d'analogue direct au (type)instance
mécanisme de conversion de C # . J'évoque cela parce que c'est utile 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 strict que l'opérateur de conversion C #. Il ne vous permet de lancer que lorsque l'élément en cours de diffusion est déjà du type vers lequel vous lancez le casting. Je pense que cela déballera toujours les types de valeur, mais sinon, il ne fera aucune conversion. Ainsi, par exemple, vous ne pouvez pas effectuer de cast de short
vers int
, comme vous le feriez avec un (int)
cast C # . Mais vous pouvez effectuer un cast de an IEnumerable
vers un tableau, si votre IEnumerable
variable objet sous-jacente est vraiment un Array
. Et bien sûr, vous pouvez effectuer un cast de Object
vers n'importe quoi, en supposant que le type de votre instance d'objet se trouve vraiment quelque part en dessous de votre type de distribution dans l'arborescence d'héritage.
C'est souhaitable car c'est beaucoup plus rapide . Il y a moins de conversion et de vérification de type à effectuer.
CType()
est moins strict que l'opérateur de conversion C #. Il fera des choses que vous ne pouvez tout simplement pas faire avec un (int)
cast de style simple , comme convertir une chaîne en entier. Il a autant de puissance que d'appeler Convert.To___()
en C #, où ___
est le type de cible de votre distribution.
C'est souhaitable car c'est très puissant. Cependant, cette puissance se fait au détriment des performances; ce n'est pas aussi rapide que DirectCast()
ou l'opérateur de cast de C # car il peut avoir besoin de beaucoup de travail pour terminer le casting. En général, vous devriez préférer DirectCast()
quand vous le pouvez.
Enfin, vous avez manqué un opérateur de casting:, TryCast()
qui est un analogue direct à l' as
opérateur C # .