2010-08-15 12 views
5

Ich könnte Folgendes schreiben, um ein Objekt in eine ganze Zahl zu konvertieren.Was ist der Unterschied zwischen Convert und Parse?

Convert.ToInt32(myObject); 

Aber ich auch

Int.Parse(myObject.ToString()); 
  • Gibt es einen Unterschied schreiben könnte?
  • Welches sollte ich verwenden?

Vielen Dank im Voraus.

+0

möglich Duplikat von [Was ist der Hauptunterschied zwischen int.Parse() und Convert.ToInt32] (http://stackoverflow.com/questions/199470/whats-the-main-difference-between-int-parse-and -convert-toint32) – nawfal

Antwort

4
  • Gibt es einen Unterschied?

Ja, Int32.parse(myObject.ToString()); nimmt einen Umweg zu bespannen, die in der Regel funktionieren, aber es ist nicht erforderlich, und es kann fehlschlagen oder ein anderes Ergebnis geben.

  • Welches sollte ich verwenden?

Im Allgemeinen Convert.ToInt32(myObject);

Aber es hängt davon ab, welche Art von Daten, die Sie konvertieren möchten.

Wenn myObject = '1';, möchten Sie 1 oder 49?

Wenn myObject = false;, möchten Sie 0 oder eine Ausnahme? Diese

etc

1

wie Convert.ToInt32 Methode Quelle sieht aus wie

public static int ToInt32(object value) { 
    return value == null? 0: ((IConvertible)value).ToInt32(null); 
} 

Solange Ihr Objekt IConvertible-Schnittstelle implementieren, sollten Sie diese Methode aufrufen.

+0

Wenn das Objekt IConvertable implementiert hat, gibt es nichts, was mich daran hindert, nur myObject (IConvertible) zu verwenden, wodurch ein Funktionsaufruf abgeschnitten wird. –

+0

Wenn Sie sicher sind, dass es nicht null ist, sollten Sie diese Methode direkt aufrufen, aber beachten Sie, dass sie in dieser Form vom Compiler aktiviert werden kann, damit die Methode inline wird. – jethro

1

Entsprechend der documentation würde es von dem Objekt abhängen und ob es die IConvertible Schnittstelle implementiert oder nicht. Es gibt eine Reihe von Gründen, die diese Ansätze unterscheiden. Insbesondere, wenn die Zeichenfolgendarstellung nicht den entsprechenden ganzzahligen Wert darstellt (z. B. "{Wert = 123}") oder das Objekt nicht IConvertible ist. Ich würde wählen, Convert.ToInt32() zu verwenden, da die Konvertierung vom Typ definiert wird und nicht auf einigen beobachteten Eigenschaften beruht, die sich in der Zukunft ändern könnten.

0

Soweit ich weiß, Konvertieren und Parse in vielerlei Hinsicht unterscheiden:

Mittel Zum Konvertieren ein Objekt von seinem ursprünglichen Typ in einem anderen Typ (wenn möglich) .Allerdings beiden Objekte in irgendwie gleich sind zu werfen ihr eigener Kontext ist zum Beispiel "32" ist die String-Version von 32 (als Integer). In einigen Sprachen wie Visual Basic kann diese Art der Konvertierung implizit passieren.

Zu analysieren bedeutet, eine Eingabe (normalerweise in Form einer Zeichenkette) zu akzeptieren und sie in ein Objekt zu übersetzen, das eine völlig andere Sache sein kann. Nimm das Datum als Beispiel: Wir können "20. Juli 2010" analysieren, was eine Zeichenfolge zu einem Datum ist. Das bedeutet, dass wir die angegebene Zeichenfolge in ein Datumsobjekt mit 20 als Tag, 7 als Monat und 2010 als Jahr übersetzen müssen. Es ist offensichtlich, dass diese Aufgabe nicht einfach ist und dass eine Logik zum Analysieren der Zeichenfolge vorhanden sein sollte.

Verwandte Themen