108 votes

Différence entre DirectCast () et CType () dans VB.Net

Je suis un programmeur C / C ++ / C # expérimenté qui vient de se lancer dans VB.NET. J'utilise généralement CType (et CInt, CBool, CStr) pour les conversions, car il s'agit d'un nombre moins important de caractères et a été le premier moyen de diffusion auquel j'ai été exposé, mais je connais aussi DirectCast et TryCast.

Existe-t-il simplement des différences (effet de la distribution, des performances, etc.) entre DirectCast et CType? Je comprends l'idée de TryCast.

190voto

Joel Coehoorn Points 190579

La première chose à noter est que VB.Net ne pas directement de l'analogique vers le C#' (type)instance casting mécanisme. - Je apporter que parce que c'est utile de l'utiliser comme un point de départ pour comparer les deux VB.Net les opérateurs (et ils sont des opérateurs, des fonctions pas, même si ils ont la fonction sémantique).

DirectCast() est plus strict que le C# opérateur de coulée. Il ne vous permet de voter lorsque l'élément en cours de fonte est déjà le type coulée de. Il ne pourra pas faire de conversion. Ainsi, par exemple, vous ne pouvez pas lancer de short int, comme vous pouvez avec un C# (int) exprimés. Mais vous pouvez lancer à partir d'un IEnumerable à un tableau, si votre sous-jacents IEnumerable variable objet est vraiment un Array. Et bien sûr vous pouvez lancer à partir de l'Objet à quoi que ce soit, en supposant que le type de votre instance de l'objet est vraiment quelque part en dessous de votre type moulé dans l'arbre d'héritage.

C'est souhaitable car cela le rend plus rapide. Il y a un peu moins de la conversion et de la vérification de type qui doit avoir lieu.

CType() est moins strict que le C# opérateur de coulée. Il va faire des choses comme convertir une chaîne en un entier que vous ne pouvez pas faire avec un simple (int) exprimés. Il a autant de pouvoir que l'appelant Convert.To___() en C#, où l' _ est le type de cible de votre plâtre. C'est souhaitable, car il est très puissant, mais que la puissance est au prix de la performance n'est pas aussi rapide que DirectCast() ou C#'opérateur de cast, car il pourrait y avoir beaucoup de travail à faire pour terminer le casting.

En général, vous devriez préférer DirectCast() quand vous le pouvez.

Enfin, vous avez raté un opérateur de coulée: TryCast(), ce qui est une conséquence directe de l'analogique vers le C#' as de l'opérateur.

12voto

Abhay Points 11

Avec CType, vous pouvez écrire quelque chose comme ceci: Ctype("string",Integer) . Mais avec DirectCast l’instruction ci-dessus donnerait une erreur de compilation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X