2008-08-20 10 views
13

Dans .Net, vous pouvez lire une valeur de chaîne dans un autre type de données en utilisant <datatype>.parse ou Convert.To<DataType>..Net Parse versus Convert

Je ne suis pas familier avec les principes fondamentaux de l'analyse par rapport à convertir donc je suis toujours à la perte lorsqu'on me demande lequel est meilleur/plus rapide/plus approprié.

Alors - quel est le meilleur moyen dans quel type de circonstances?

Répondre

15

Les Convert.ToXXX() méthodes sont des objets qui pourraient être du type correct ou similaire, alors que .Parse() et .TryParse() sont spécifiquement pour les chaînes:

//o is actually a boxed int 
object o = 12345; 

//unboxes it 
int castVal = (int) 12345; 

//o is a boxed enum 
object o = MyEnum.ValueA; 

//this will get the underlying int of ValueA 
int convVal = Convert.ToInt32(o); 

//now we have a string 
string s = "12345"; 

//this will throw an exception if s can't be parsed 
int parseVal = int.Parse(s); 

//alternatively: 
int tryVal; 
if(int.TryParse(s, out tryVal)) { 
    //do something with tryVal 
} 

Si vous compilez avec des drapeaux d'optimisation TryParse est très rapide - c'est le meilleur façon d'obtenir un nombre à partir d'une chaîne. Cependant si vous avez un objet qui pourrait être un int ou pourrait être une chaîne Convert.ToInt32 est plus rapide.

1

Il existe également la méthode DirectCast que vous devez utiliser uniquement si vous êtes sûr du type de l'objet. C'est plus rapide, mais il n'y a pas de vérification appropriée. J'utilise DirectCast lorsque j'extrais des valeurs d'un DataTable mal typé lorsque je connais le type pour chaque colonne.

1

Si vous avez besoin de vitesse, je suis sûr que la distribution directe est le moyen le plus rapide. Cela étant dit, j'utilise normalement .Parse ou .TryParse parce que cela semble rendre les choses plus faciles à lire, et se comporter d'une manière plus prévisible.

Convertir réellement appelle Parse sous le capot, je crois. Donc, il y a peu de différence là-bas, et c'est vraiment juste une question de goût personnel.

3

Je suis un grand fan de TryParse, car il vous évite beaucoup de maux de tête de l'erreur d'attraper quand il y a une chance que la valeur que vous allez analyser n'est pas du type approprié.

Ma commande est généralement:

  • Parse (si je peux être sûr que la valeur sera le bon type, et j'essaie d'en assurer)
  • TryParse (si je ne peux pas être sûr , ce qui se produit chaque fois que l'entrée d'utilisateur est impliqué, ou l'entrée d'un système vous ne pouvez pas contrôler)
  • Convert (que je pense que je ne l'ai pas utilisé depuis que je commencé à utiliser Parse et TryParse, mais je peux me tromper)