Tous ces éléments sont-ils égaux? Dans quelles circonstances dois-je choisir les uns sur les autres?
var.ToString ()
CStr (var)
CType (var, chaîne)
DirectCast (var, chaîne)
EDIT: Suggestion de NotMyself …
- TryCast (var, chaîne)
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 sous forme de chaîne d'un objet, quel que soit son type. Utilisez ceci si ce 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, alors je suggérerais de l'éviter, mais ça ne va vraiment rien faire de mal. Je pense que c'est fondamentalement le même que CType
.CType
(var, String)
convertira le type donné en chaîne, en utilisant tous 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 qu'en (string)var
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 lever une exception. C'est la même chose qu'en var as string
C #. La TryCast
page sur MSDN a également une bonne comparaison.
TryCast
ne fonctionne que pour les types valeur, car il doit s'agir d'un type pouvant avoirNothing
une valeurCStr(var)
s'étouffera et lèvera une exception si la variable est DBNull.Value, mais l'alternativeConvert.ToString(var)
retournera une chaîne vide.Dim myList AS ArrayList=new ArrayList
Lorsque vous écrivez,(From e In myList select CType(e.Name,String)).ToArray()
cela ne fonctionne pas. Je suis venu écrire... select CType(e.Name.ToString,String)).ToArray()
et j'ai retrouvé mon sourire.Cstr()
est compilé en ligne pour de meilleures performances.CType
autorise les transtypages entre les types si un opérateur de conversion est définiToString()
Entre le type de base et la chaîne lève une exception si la conversion n'est pas possible.TryParse()
De la chaîne à la basetypeif
possible sinon retourne falseDirectCast
utilisé si les types sont liés par héritage ou partagent une interface commune, lèvera une exception si le cast n'est pas possible,trycast
ne retournera rien dans cette instancela source
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, il suggère également DirectCast par opposition à CType dans certains cas (les documentations indiquent que c'est lorsqu'il y a une relation d'héritage; Je pense que cela signifie que la cohérence de la distribution est vérifiée au moment de la compilation et 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 du code prototype que je vais jeter, j'utilise tout ce que je tape. Si c'est du code dont je suis sérieux, j'essaye 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 (entrée utilisateur -> entiers, par exemple), alors j'utilise TryCast afin de faire quelque chose de plus convivial que de lancer une exception à l'utilisateur.
Une chose que je ne peux pas secouer est que j'ai tendance à utiliser ToString au lieu de CStr, mais Cstr est censé être plus rapide.
la source
Je préfère la syntaxe suivante:
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 des exceptions de diffusion. Votre conversion réussit ou votre variable est initialisée à null et vous gérez cela en conséquence.
la source
.ToString()
. Un type valeur, tel que Integer, ne peut pas être Nothing. Donc, dans ce cas, CStr (nombre) ou number.ToString () est sûr. Dans le cas général (pas seulement les types valeur), CStr (peu importe) est sûr, car il peut gérer Nothing - le résultat sera Nothing, dans la variable String. TryCast est très utile - mais pas ici.L'utilisateur Konrad Rudolph plaide pour DirectCast () dans la question de Stack Overflow «Fonctionnalités cachées de VB.NET» .
la source
String
, il est peu probable que le PO ait discuté d'une situation où DirectCast est approprié.String
etToString
, ma plainte ne s'appliquerait pas. Vous ne devriez pas plaider en faveur de DirectCast, jusqu'à ce que vous ayez réduit le sujet de la CONVERSION générale.Selon l'examen de certification, vous devez utiliser Convert.ToXXX () chaque fois que possible pour des conversions simples, car il optimise les performances mieux que les conversions CXXX.
la source
À un moment donné, je me souviens avoir vu l'état de la bibliothèque MSDN pour utiliser CStr () car c'était plus rapide. Je ne sais pas si cela est vrai.
la source