- Was ist der Hauptunterschied zwischen
int.Parse()
yConvert.ToInt32()
? - Welches ist zu bevorzugen?
Antworten
Zu viele Anzeigen?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
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.
Ich hoffe, das hilft.
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 )
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.
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