162 votes

Comment dois-je effectuer un cast en VB.NET ?

Toute la ces derniers sont égaux ? Dans quelles circonstances devrais-je choisir chacune au détriment des autres ?

  • var. ToString()

  • CStr(var)

  • CType (var, String)

  • DirectCast (var, String)


EDIT : Suggestion de NotMyself...

  • TryCast (var, String)

173voto

bdukes Points 54833

Ceux-ci sont tous légèrement différents, et ont généralement une utilisation acceptable.

  • var.ToString() va vous donner la représentation de chaîne d'un objet, peu importe quel type il est. Utilisez-le si var n'est pas une chaîne déjà.
  • CStr(var) est le VB chaîne opérateur de cast. Je ne suis pas un VB gars, je vous suggère de les éviter, mais il n'est pas vraiment de mal quoi que ce soit. Je pense que c'est fondamentalement la même, en CType.
  • CType(var, String) vous permet de convertir le type donné dans une chaîne, à l'aide fournie opérateurs de conversion.
  • DirectCast(var, String) est utilisé à effectuer un cast d'un objet en chaîne de caractères. Si vous savez qu'une variable d'objet est, en fait, une chaîne de caractères, l'utilisation de ce. C'est le même que (string)var en C#.
  • TryCast (comme indiqué par @NotMyself) DirectCast, mais il sera de retour Nothing si la variable ne peut pas être convertie en une chaîne de caractères, plutôt que de lancer une exception. C'est le même que var as string en C#. L' TryCast page sur MSDN a une bonne comparaison, trop.

9voto

OwenP Points 11164

MSDN semble indiquer que la Cxxx des moulages pour des types spécifiques peuvent améliorer les performances en VB .NET parce qu'ils sont convertis au code en ligne. Pour une raison quelconque, il suggère aussi DirectCast par opposition à CType dans certains cas (les documentations des états, c'est quand il y a une relation d'héritage; je crois que cela signifie que la santé mentale de la distribution est vérifié au moment de la compilation et d'optimisation peut être appliquée alors que CType utilise toujours le temps d'exécution de VB.)

Quand j'écris VB .NET code, ce que j'ai à utiliser dépend de ce que je fais. Si c'est le prototype de code, je vais le jeter, j'utilise tout ce que j'arrive à taper. Si c'est du code, je suis sérieux, j'essaie d'utiliser un Cxxx exprimés. Si l'un n'existe pas, j'utilise DirectCast si j'ai des motifs raisonnables de croire qu'il y a une relation d'héritage. Si c'est une situation où je n'ai aucune idée si le casting devrait réussir (la saisie de l'utilisateur -> nombres entiers, par exemple), puis-je utiliser TryCast de manière à faire quelque chose de plus convivial que de jeter une exception à l'utilisateur.

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

8voto

NotMyself Points 7567

Je préfère la syntaxe suivante :

Ah, vous pouvez dire que j’ai généralement écrire du code en c#. 8)

La raison pour laquelle que je préfère TryCast est que vous n’avez pas de gâchis avec la surcharge d’exceptions de la coulée. Votre plâtre soit réussit ou votre variable est initialisée à null et vous qui traitez en conséquence.

4voto

Zack Peterson Points 19350

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X