Casting DataTypes avec DirectCast, CType, TryCast

Depuis que je suis passé de VB6 à VB.NET quelque part en 2005, j’ai utilisé CType pour faire un casting d’un type de données à un autre. Je le fais car il est simplement plus rapide à taper, il existait dans VB6 et je ne sais pas pourquoi je dois utiliser DirectCast s’il n’y a apparemment aucune différence entre eux.

J’utilise TryCast de temps en temps parce que je comprends que parfois le casting peut échouer. Je ne peux cependant pas faire la différence entre CType et DirectCast.

Quelqu’un peut-il me dire la différence en anglais simple simple quelle est la différence les deux (CType et DirectCast)? L’ajout d’exemples d’utilisation de ce qui serait utile serait également utile.

    TryCast et DirectCast sont des opérateurs de casting qui correspondent directement au support du CLR pour le casting. Ils peuvent rapidement convertir un object d’un type de base en un type dérivé ou désélectionner une valeur d’un type de valeur. DirectCast lève une exception lorsque la dissortingbution est impossible, TryCast renvoie Nothing si elle échoue. Vous souhaitez généralement privilégier DirectCast pour détecter les erreurs de programmation.

    CType permet un sur-ensemble de conversions, celles que le CLR regrette. Le meilleur exemple auquel je puisse penser est de convertir une chaîne en nombre ou en date. Par exemple:

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

    Ce que vous devrez utiliser si Option Ssortingct On est en vigueur. Si c’est désactivé, vous pouvez le faire directement:

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

    Très pratique bien sûr et une partie de l’inheritance de VB.NET en tant que langage typé dynamicment. Mais non sans problèmes, cette date est le jour de la Licorne sur stackoverflow.com mais sera un jour en janvier où un Britannique entrera dans la chaîne. Les conversions inattendues sont la raison pour laquelle le CLR ne les autorise pas directement. L’explicite, jamais une conversion surprise ressemble à ceci:

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

    Si vous devez acheter dans Try / DirectCast vs CType vs conversions explicites est plutôt un choix personnel. Si vous programmez maintenant avec Option Ssortingct On, vous devriez certainement commencer à utiliser Try / DirectCast. Si vous préférez le langage VB.NET parce que vous aimez la commodité de la saisie dynamic, n’hésitez pas à restr sur CType.

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

    Cette page l’ explique bien.

    En le lisant, je pense que lorsque vous utilisez DirectCast , vous êtes sûr que la conversion fonctionnera sans rétrécissement ni expansion (dans ce cas, des données numériques). Tandis que CType essaiera de s’y convertir, le développeur étant au courant de la réduction / expansion.

    Par “conversion”, on entend convertir un type de données en un autre (par exemple, chaîne en entier, décimal en entier, object en chaîne, etc.).

    Par “lancer”, on entend le changement d’un type d’object en un autre type qui lui est associé par l’une des règles suivantes.

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