Question

Depuis que je suis passé de VB6 quelque part de VB.NET en 2005, je me sers CType faire couler d'un type de données à un autre. Je le fais parce qu'il est tout simplement plus rapide à taper, existaient dans VB6 et je ne sais pas pourquoi je dois être en utilisant DirectCast s'il n'y a apparemment pas de différence entre eux.

J'utilise TryCast une fois dans un certain temps parce que je comprends que, parfois, la coulée peut échouer. Je ne peux cependant pas obtenir la différence entre CType et DirectCast.

Quelqu'un peut-il me dire la différence en anglais de simples plaine quelle est la différence des deux (CType et DirectCast)? Ajout d'exemples d'où utiliser ce aussi bien serait utile.

Était-ce utile?

La solution

TryCast et DirectCast jettent les opérateurs qui tracent directement au support du CLR pour la coulée. Ils peuvent lancer rapidement un objet d'un type de base pour un type dérivé ou unbox une valeur d'un type de valeur. DirectCast jette une exception lorsque la distribution est impossible, TryCast retourne rien si elle a échoué. Vous voulez généralement favoriser DirectCast pour attraper des erreurs de programmation.

CType permet une surcouche de conversions, celles que les froncements de sourcils CLR sur. Le meilleur exemple que je peux penser est une chaîne à convertir un certain nombre ou la date. Par exemple:

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

Ce qui vous devez utiliser si Option Strict On est en vigueur. Si elle est désactivée, vous pouvez le faire directement:

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

Très pratique bien sûr et une partie de l'héritage de VB.NET en tant que langage typé dynamiquement. Mais pas sans problème, cette date est le jour Unicorn à stackoverflow.com mais sera un jour en Janvier quand un Britannique entre dans la chaîne. conversions inattendues est la raison pour laquelle le CLR ne permet pas ces directement. Les explicites, jamais une apparence de conversion surprise comme ceci:

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

Si vous devez acheter dans Try / DirectCast vs vs CType conversions explicites est plutôt un choix personnel. Si vous maintenant programme avec Option Strict On vous devriez certainement commencer en utilisant Try / DirectCast. Si vous préférez la langue VB.NET parce que vous aimez la commodité de typage dynamique alors ne pas hésiter à rester sur CType.

Autres conseils

DirectCast est deux fois plus rapide pour les types de valeurs (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 explique bien .

La lecture, je pense que lorsque vous utilisez DirectCast, vous êtes sûr que la conversion fonctionnera sans rétrécissement ou d'expansion (dans ce cas, des données numériques). Considérant que, CType va essayer de convertir en elle, avec le développeur en étant conscient de rétrécissement / expansion.

Par « conversion » moyen de conversion de type de données une à l'autre (par exemple à chaîne nombre entier, nombre décimal en nombre entier, objet de chaîne, etc.).

Par signifie « cast » changement d'un type d'objet dans un autre type qui est qui lui est liée par l'une des règles suivantes.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top