Depuis que je suis passé de VB6 à VB.NET quelque part en 2005, j'utilise CType pour faire du cast d'un type de données à un autre. Je le fais parce qu'il est tout simplement plus rapide à taper, il existait auparavant 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 car je comprends que parfois le casting peut échouer. Cependant, je ne peux pas faire la différence entre CType et DirectCast.
Quelqu'un peut-il me dire la différence en anglais simple et simple quelle est la différence entre les deux (CType et DirectCast)? Il serait utile d'ajouter des exemples où utiliser quoi.
TryCast et DirectCast sont des opérateurs de casting qui mappent directement sur le support du CLR pour le casting. Ils peuvent rapidement convertir un objet d'un type de base en un type dérivé ou décompresser une valeur d'un type de valeur. DirectCast lève une exception lorsque la conversion n'est pas possible, TryCast renvoie Nothing en cas d'échec. Vous souhaitez généralement favoriser DirectCast pour détecter les erreurs de programmation.
CType permet un surensemble de conversions, celles sur lesquelles le CLR désapprouve. Le meilleur exemple auquel je peux penser est la conversion d'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 l'option Strict On est activée. S'il est désactivé, vous pouvez le faire directement:
Option Strict Off
...
Dim dt As DateTime = obj
Très pratique bien sûr et faisant partie de l'héritage de VB.NET en tant que langage typé dynamiquement. Mais non sans problèmes, cette date est le jour de la Licorne sur stackoverflow.com mais sera un jour de janvier où un Britannique entre dans la chaîne. Les conversions inattendues sont la raison pour laquelle le CLR ne les autorise pas directement. La conversion explicite, jamais une surprise, ressemble à ceci:
Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)
Que vous deviez acheter dans Try/DirectCast vs CType vs conversions explicites est plutôt un choix personnel. Si vous programmez maintenant avec Option Strict On, vous devez absolument commencer à utiliser Try/DirectCast. Si vous préférez le langage VB.NET parce que vous aimez la commodité de la frappe dynamique, n'hésitez pas à rester 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, consultez la section "Fonctions de conversion, CType, DirectCast et System.Convert" sur la page this 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 le convertir, le développeur étant conscient du rétrécissement/expansion.
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 "transtypage", on entend le changement d'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