Question

Est-ce que tous ces éléments sont égaux ?Dans quelles circonstances dois-je choisir l’un plutôt que l’autre ?

  • var.ToString()

  • CStr(var)

  • CType(var, Chaîne)

  • DirectCast(var, Chaîne)


MODIFIER:Suggestion de Pas moi

  • TryCast(var, Chaîne)
Était-ce utile?

La solution

Ceux-ci sont tous légèrement différents et ont généralement un usage acceptable.

  • var.ToString() va vous donner la représentation sous forme de chaîne d'un objet, quel que soit son type.Utilisez-le si var n'est pas déjà une chaîne.
  • CStr(var) est l'opérateur de conversion de chaîne VB.Je ne suis pas un gars de VB, donc je suggérerais de l'éviter, mais cela ne fera vraiment de mal à rien.Je pense que c'est fondamentalement la même chose que CType.
  • CType(var, String) convertira le type donné en chaîne, en utilisant les opérateurs de conversion fournis.
  • DirectCast(var, String) est utilisé pour convertir un objet en chaîne.Si vous savez qu'une variable objet est en fait une chaîne, utilisez ceci.C'est la même chose que (string)var en C#.
  • TryCast (comme mentionné par @Pas moi) est comme DirectCast, mais il reviendra Nothing si la variable ne peut pas être convertie en chaîne, plutôt que de lever une exception.C'est la même chose que var as string en C#.Le TryCast La page sur MSDN propose également une bonne comparaison.

Autres conseils

Cstr() est compilé en ligne pour de meilleures performances.

CType permet les conversions entre types si un opérateur de conversion est défini

ToString() Entre le type de base et la chaîne, une exception est générée si la conversion n'est pas possible.

TryParse() De la chaîne à la base typeif possible sinon renvoie faux

DirectCast utilisé si les types sont liés via l'héritage ou partagent une interface commune, lèvera une exception si la conversion n'est pas possible, trycast ne retournera rien dans ce cas

Je préfère la syntaxe suivante :

Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

Hah, vous pouvez dire que j'écris généralement du code en C#.8)

La raison pour laquelle je préfère TryCast est que vous n'avez pas à vous soucier de la surcharge liée à la diffusion d'exceptions.Soit votre conversion réussit, soit votre variable est initialisée à null et vous gérez cela en conséquence.

MSDN semble indiquer que les conversions Cxxx pour des types spécifiques peuvent améliorer les performances dans VB .NET car elles sont converties en code en ligne.Pour une raison quelconque, cela suggère également Diffusion directe par opposition à CType dans certains cas (la documentation indique que c'est lorsqu'il y a une relation d'héritage ;Je pense que cela signifie que l'intégrité de la distribution est vérifiée au moment de la compilation et que des optimisations peuvent être appliquées alors que CType utilise toujours le runtime VB.)

Lorsque j'écris du code VB .NET, ce que j'utilise dépend de ce que je fais.Si c'est un code prototype que je vais jeter, j'utilise tout ce que je tape.Si c'est du code qui me préoccupe sérieusement, j'essaie d'utiliser un casting Cxxx.S'il n'en existe pas, j'utilise DirectCast si j'ai une conviction raisonnable qu'il existe une relation d'héritage.Si c'est une situation où je n'ai aucune idée si le casting doit réussir (saisie utilisateur -> nombres entiers, par exemple), alors j'utilise TryCast pour faire quelque chose de plus convivial que de lancer une exception à l'utilisateur.

Une chose que je ne peux pas ébranler, c'est que j'ai tendance à utiliser ToString au lieu de CStr, mais soi-disant Cstr est plus rapide.

Selon l'examen de certification, vous devez utiliser Convert.ToXXX() autant que possible pour des conversions simples, car il optimise mieux les performances que les conversions CXXX.

À un moment donné, je me souviens avoir vu l'état de la bibliothèque MSDN utiliser CStr() car c'était plus rapide.Je ne sais pas si cela est vrai.

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