Comment dois-je m'y prendre? VB.NET Je ne sais pas.

sont-ils tous égaux? Dans quelles circonstances devrais-je choisir l'un plutôt que l'autre?

  • var.ToString ()

  • CStr(var)

  • CType (var, String)

  • DirectCast (var, String)


modifier: Suggestion de NotMyself ...

  • TryCast (var, String)
136
demandé sur Community 2008-09-03 01:49:32

7 réponses

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 string d'un objet, quel que soit son type. Utilisez ceci si var n'est pas déjà une chaîne de caractères.
  • CStr (var) est l'opérateur de coulée de corde VB. Je ne suis pas un gars VB, donc je suggère Je l'évite, mais ça ne va pas vraiment faire de mal. Je pense que c'est essentiellement la même que CType .
  • CType (var, String) convertira le type donné en une chaîne de caractères, en utilisant les opérateurs de conversion fournis.
  • DirectCast (var, String) est utilisé pour transformer un objet en corde. Si vous savez qu'une variable objet est, en fait, une chaîne, utilisez ceci. C'est le même que (string)var en C#.
  • TryCast (comme mentionné par @ NotMyself ) est comme DirectCast , mais il retournera Nothing si la variable ne peut pas être convertie en une chaîne, plutôt que de lancer une exception. C'est la même chose que var as string dans C#. La page TryCast sur MSDN présente également une bonne comparaison.
142
répondu bdukes 2017-05-23 11:54:36

Cstr() est compilé en ligne pour une meilleure performance.

CType permet des moulages entre types si un opérateur de conversion est défini

ToString() entre le type de base et la corde jette une exception si la conversion n'est pas possible.

TryParse() De la Corde à la base typeif possible, sinon retourne false

DirectCast utilisé si les types sont liés par héritage ou partager une interface commune, lancera une exception si la fonte n'est pas possible, trycast ne retournera rien dans ce cas

10
répondu Siddharth Rout 2012-06-09 21:55:08

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 mêler des exceptions concernant les frais généraux de casting. Votre casting réussit ou votre variable est initialisée à null et vous en conséquence.

8
répondu NotMyself 2012-03-27 03:42:20

MSDN semble indiquer que les moulages Cxxx pour des types spécifiques peuvent améliorer les performances dans VB .NET parce qu'ils sont convertis en code inline. Pour une raison quelconque, il suggère aussi DirectCast par opposition à CType dans certains cas (les documentations indiquent que c'est quand il y a une relation de succession; je crois que cela signifie que la santé de la fonte est vérifiée au moment de la compilation et des optimisations peuvent être appliquées alors que CType utilise toujours les VB runtime.)

quand j'écris du code VB. net, ce que j'utilise dépend de ce que je fais. Si c'est du code prototype que je vais jeter, j'utilise ce que je tape. Si c'est du code dont je parle sérieusement, j'essaie d'utiliser un casting Cxxx. Si l'un n'existe pas, J'utilise DirectCast si j'ai une croyance raisonnable qu'il y a une relation d'héritage. Si c'est une situation où je n'ai aucune idée si le cast devrait réussir (entrée utilisateur -> entiers, par exemple), alors J'utilise TryCast de manière à faire quelque chose de plus convivial que de jeter une exception à l'utilisateur.

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

7
répondu OwenP 2008-09-02 22:12:07

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

1
répondu SickPuP 2011-03-16 18:44:19

à une certaine époque, je me souviens avoir vu la bibliothèque MSDN utiliser CST() parce qu'elle était plus rapide. Je ne sais pas si c'est vrai que l'.

0
répondu joek1975 2008-09-05 19:03:09