42 votes

Casting DataTypes avec DirectCast, CType, TryCast

Depuis que j'ai déménagé de VB6 à VB.NET quelque part en 2005, j'ai été en utilisant CType de faire de la conversion d'un type de données à l'autre. Je le fais parce que c'est tout simplement plus rapide à taper, existait en VB6 et je ne sais pas pourquoi je dois être à l'aide de DirectCast si il n'y a apparemment pas de différence entre eux.

J'utilise TryCast de temps en temps parce que je comprends que, parfois, la coulée peut échouer. J'ai cependant ne peut obtenir la différence entre CType et DirectCast.

Quelqu'un peut me dire la différence dans la plaine, un anglais simple ce qu'est la différence des deux (CType et DirectCast)? Ajouter des exemples de cas d'utilisation de ce bien serait utile.

Merci.

57voto

Hans Passant Points 475940

TryCast et DirectCast sont casting opérateurs qui mènent directement à la CLR de soutien pour la coulée. Ils peuvent rapidement jeter un objet d'un type de base à un type dérivé ou unbox une valeur d'un type valeur. DirectCast déclenche une exception quand le plâtre n'est pas possible, TryCast ne retourne Rien si elle a échoué. Vous souhaitez généralement faveur DirectCast pour attraper les erreurs de programmation.

CType permet un sur-ensemble de conversions, ceux qui le CLR fronce les sourcils sur. Le meilleur exemple que je peux penser à est de convertir une chaîne en un nombre ou une date. Par exemple:

Dim obj As New Object
obj = "4/1/2010"
Dim dt As DateTime = CType(obj, DateTime)

Que vous devrez utiliser si Option Strict on est en vigueur. S'il est Hors tension, puis vous pouvez le faire directement:

Option Strict Off
...
    Dim dt As DateTime = obj

Très pratique de cours et une partie de VB.NET héritage comme un typées dynamiquement de la langue. Mais pas sans problèmes, qui date de la Licorne à jour stackoverflow.com mais ce sera une journée en janvier, quand un Britannique entre dans la chaîne. Conversions inattendues est la raison pour laquelle le CLR ne permet pas directement. L'explicite, n'est jamais une surprise de conversion ressemble à ceci:

Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
    System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)

Si vous devez acheter en Essayer/DirectCast vs CType vs conversions explicites est plutôt un choix personnel. Si vous avez maintenant le programme avec l'Option Strict Sur alors vous devriez certainement commencer à utiliser Try/DirectCast. Si vous en faveur de la VB.NET langue, parce que vous aimez le confort de typage dynamique alors n'hésitez pas à rester sur CType.

17voto

Oded Points 271275

DirectCast est deux fois plus rapide pour les types de valeur (nombres entiers, etc.), mais identique pour les types de référence.

Pour plus d'informations, voir la section "Fonctions de conversion, CType, DirectCast et System.Convert" sur cette page MSDN.

1voto

shahkalpesh Points 21553

Cette page l' explique bien.

En le lisant, je pense que lorsque vous utilisez DirectCast , vous êtes certain que la conversion fonctionnera sans restriction ni expansion (dans ce cas, les données numériques). Considérant que, CType essaiera de s'y convertir, le développeur étant conscient de son rétrécissement / de son expansion.

0voto

Vikash Sinha Points 136

Par "conversion", on entend la conversion d'un type de données en un autre (par exemple, chaîne en entier, décimal en entier, objet en chaîne, etc.).

Par "cast", on entend changer un type d'objet en un autre type qui lui est lié par l'une des règles suivantes.

http://www.thedevheaven.com/2012/09/directcast-vs-ctype.html

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