2008-08-20 13 views
13

In .Net können Sie einen Zeichenfolgenwert in einen anderen Datentyp mit <datatype>.parse oder Convert.To<DataType> lesen..Net Parse versus Convert

Ich bin nicht vertraut mit den Grundlagen der Pars versus konvertieren, so bin ich immer ratlos, wenn gefragt, welche ist besser/schneller/geeigneter.

Also - welcher Weg ist in welchen Umständen am besten?

Antwort

15

Die Convert.ToXXX() Methoden sind für Objekte, die von der korrekten oder ähnlicher Art sein könnte, während .Parse() und .TryParse() speziell für Strings sind:

//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 
} 

Wenn Sie mit Optimierungsflags TryParse kompilieren ist sehr schnell - es ist die beste Möglichkeit, eine Nummer aus einer Zeichenfolge zu erhalten. Wenn Sie jedoch ein Objekt haben, das ein int oder eine Zeichenfolge sein könnte, ist Convert.ToInt32 schneller.

1

Es gibt auch die DirectCast-Methode, die Sie nur verwenden sollten, wenn Sie sich sicher sind, um welche Art von Objekt es sich handelt. Es ist schneller, führt aber keine ordnungsgemäßen Prüfungen durch. Ich verwende DirectCast, wenn ich Werte aus einer lose typisierten DataTable extrahiere, wenn ich den Typ für jede Spalte kenne.

1

Wenn Sie Geschwindigkeit brauchen, bin ich mir ziemlich sicher, dass eine direkte Besetzung der schnellste Weg ist. Davon abgesehen verwende ich normalerweise .Parse oder .TryParse, weil es Dinge leichter lesbar macht und sich vorhersehbarer verhält.

Convert ruft tatsächlich Parse unter der Haube, glaube ich. Es gibt also kaum einen Unterschied, und es scheint wirklich eine Frage des persönlichen Geschmacks zu sein.

3

Ich bin ein großer Fan von TryParse, da es Ihnen eine Menge Kopfschmerzen von Fehlereinfangen erspart, wenn es eine Chance gibt, dass der Wert, den Sie analysieren werden, nicht vom passenden Typ ist.

Mein Auftrag ist in der Regel:

  • Parst (wenn ich sicher sein kann, wird der Wert der richtige Typ sein, und ich versuche, dies zu gewährleisten)
  • TryParse (wenn ich nicht sicher sein kann, , die passieren, wenn Benutzereingaben beteiligt sind, oder eine Eingabe von einem System kann man nicht kontrollieren)
  • Convert (was ich denke, ich nicht verwendet habe, seit ich mit Parse und TryParse begonnen, aber ich könnte falsch sein)