589 Stimmen

Was ist der Hauptunterschied zwischen int.Parse() und Convert.ToInt32

  • Was ist der Hauptunterschied zwischen int.Parse() y Convert.ToInt32() ?
  • Welches ist zu bevorzugen?

15voto

Sonu Rajpoot Punkte 455

Int32.parse(string)--->

Int32.Parse (string s) konvertiert die String-Darstellung einer Zahl in ihre 32-Bit-Entsprechung als vorzeichenbehaftete Ganzzahl. Wenn s eine Null-Referenz ist, wird ArgumentNullException ausgelöst. Wenn s ein anderer Wert als Integer ist, wird FormatException ausgelöst. Wenn s eine Zahl darstellt, die kleiner als MinValue oder größer als MaxValue ist, wird OverflowException ausgelöst. Zum Beispiel :

string s1 = "1234"; 
string s2 = "1234.65"; 
string s3 = null; 
string s4 = "123456789123456789123456789123456789123456789"; 

result = Int32.Parse(s1);    //1234
result = Int32.Parse(s2);    //FormatException
result = Int32.Parse(s3);    //ArgumentNullException 
result = Int32.Parse(s4);    //OverflowException

Convert.ToInt32(string) --> Die Methode Convert.ToInt32(string s) konvertiert die angegebene String-Darstellung in eine 32-Bit-Ganzzahl mit Vorzeichen. Diese ruft wiederum die Methode Int32.Parse () auf. Wenn s eine Null-Referenz ist, wird 0 zurückgegeben, anstatt eine ArgumentNullException auszulösen. Wenn s ein anderer Wert als eine ganze Zahl ist, wird eine FormatException ausgelöst. Wenn s eine Zahl darstellt, die kleiner als MinValue oder größer als MaxValue ist, wird OverflowException ausgelöst.

Zum Beispiel:

 result = Convert.ToInt32(s1);    // 1234 
 result = Convert.ToInt32(s2);    // FormatException
 result = Convert.ToInt32(s3);    // 0
 result = Convert.ToInt32(s4);    // OverflowException

11voto

BoltBait Punkte 11254

TryParse ist schneller...

Die erste dieser Funktionen, Parse, ist eine Funktion, die jedem vertraut sein sollte, der Net-Entwickler vertraut sein sollte. Diese Funktion nimmt eine Zeichenkette und versucht eine Ganzzahl zu extrahieren und diese dann zurückzugeben. Wenn sie auf auf etwas stößt, das sie nicht parsen kann, wird eine FormatException geworfen oder wenn die Zahl zu groß ist, eine OverflowException. Außerdem kann es eine ArgumentException auslösen, wenn Sie ihm einen Nullwert übergeben.

TryParse ist eine neue Ergänzung des neuen .Net 2.0 Frameworks, die einige Probleme mit der ursprünglichen Parse-Funktion behebt. Der Haupt Unterschied ist, dass die Behandlung von Ausnahmen sehr langsam ist, wenn also TryParse nicht in der Lage ist, die Zeichenkette zu analysieren, wirft es keine Ausnahme wie Parse tut. Stattdessen wird ein boolescher Wert zurückgegeben, der angibt, ob es gelungen ist eine Zahl erfolgreich analysieren konnte. Sie müssen also an TryParse sowohl die zu parsende Zeichenkette und einen Int32-Parameter zum Ausfüllen übergeben. Wir werden den Profiler verwenden, um den Geschwindigkeitsunterschied zwischen TryParse und Parse sowohl in Fällen, in denen die Zeichenkette korrekt geparst werden kann, als auch in Fällen, in denen die Zeichenkette nicht korrekt geparst werden kann.

Die Klasse Convert enthält eine Reihe von Funktionen zur Umwandlung einer Basisklasse in eine andere. Ich glaube, dass Convert.ToInt32(string) prüft nur auf eine Nullzeichenkette (wenn die Zeichenkette Null ist, gibt sie im Gegensatz zu Parse Null zurück) und ruft dann einfach Int32.Parse(string) auf. Ich werde den Profiler verwenden, um dies zu bestätigen und um zu sehen ob die Verwendung von Convert im Gegensatz zu Parse eine echte Auswirkung auf die Leistung hat.

Quelle mit Beispielen

Ich hoffe, das hilft.

5voto

shashi shekhar Punkte 61
Convert.ToInt32

hat 19 Überladungen oder 19 verschiedene Möglichkeiten, sie aufzurufen. In den 2010er Versionen vielleicht mehr.

Es wird versucht, aus den folgenden TYPEN zu konvertieren;

Objekt, Boolean, Char, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Decimal, String, Datum

und es hat auch eine Reihe von anderen Methoden; eine, die mit einer Zahlenbasis zu tun hat, und 2 Methoden beinhalten eine System.IFormatProvider

Parse hingegen hat nur 4 Überladungen oder 4 verschiedene Möglichkeiten, wie Sie die Methode aufrufen können.

Integer.Parse( s As String)

Integer.Parse( s As String,  style As System.Globalization.NumberStyles )

Integer.Parse( s As String, provider As System.IFormatProvider )

Integer.Parse( s As String,  style As System.Globalization.NumberStyles, provider As System.IFormatProvider )

4voto

Hier ist ein Detail für int.Parse y Convert.ToInt32 : Nehmen wir an, Sie haben ein char-Array, char[] a=['1','2','3','4'] und wollen jedes Element in eine Ganzzahl umwandeln. Die Convert.ToInt32(a[0]) gibt die Zahl 49 aus, die als ASCII-Code behandelt wird Die int.Parse(a[0]) liefert die richtige Ausgabe, nämlich 1

Wenn Sie ein String-Array haben string[] b=['1','2','3','4'] entonces Convert.ToInt32 y int.Parse wird keinen Unterschied in der Ausgabe haben. Beide geben die richtige Ganzzahl zurück.

3voto

Dale K Punkte 491

Dies hängt von der Art des Parameters ab. Ich habe zum Beispiel gerade heute entdeckt, dass ein char direkt in int konvertiert wird, indem sein ASCII-Wert verwendet wird. Nicht gerade die Funktionalität, die ich beabsichtigt hatte...

SIE SIND GEWARNT!

public static int ToInt32(char value)
{
    return (int)value;
} 

Convert.ToInt32('1'); // Returns 49
int.Parse('1'); // Returns 1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X