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

Was ist der Hauptunterschied zwischen int.Parse() und Convert.ToInt32
  • Wenn Sie eine Zeichenfolge haben und erwarten, dass es sich immer um eine ganze Zahl handelt (sagen wir, wenn ein Webdienst Ihnen eine ganze Zahl im Zeichenfolgenformat übergibt), würden Sie Int32.Parse() verwenden .

  • Wenn Sie Eingaben von Benutzern erfassen, verwenden Sie im Allgemeinen Int32.TryParse() , da es Ihnen eine genauere Kontrolle über die Situation ermöglicht, wenn der Benutzer ungültige Eingaben macht.

  • Convert.ToInt32() nimmt ein Objekt als Argument. (Siehe die Antwort von Chris S. für die Funktionsweise)

    Convert.ToInt32() löst auch nicht ArgumentNullException aus wenn sein Argument null ist, so wie Int32.Parse() tut. Das bedeutet auch, dass Convert.ToInt32() ist wahrscheinlich etwas langsamer als Int32.Parse() , obwohl Sie es in der Praxis nie bemerken werden, es sei denn, Sie führen eine sehr große Anzahl von Iterationen in einer Schleife durch.


Schau mal im Reflektor:

int.Parse("32"):

public static int Parse(string s)
{
    return System.Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo);
}

das ist ein Aufruf an:

internal static unsafe int ParseInt32(string s, NumberStyles style, NumberFormatInfo info)
{
    byte* stackBuffer = stackalloc byte[1 * 0x72];
    NumberBuffer number = new NumberBuffer(stackBuffer);
    int num = 0;
    StringToNumber(s, style, ref number, info, false);
    if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None)
    {
        if (!HexNumberToInt32(ref number, ref num))
        {
            throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
        }
        return num;
    }
    if (!NumberToInt32(ref number, ref num))
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
    }
    return num;
}

Convert.ToInt32("32"):

public static int ToInt32(string value)
{
    if (value == null)
    {
        return 0;
    }
    return int.Parse(value, CultureInfo.CurrentCulture);
}

Wie der erste (Dave M's) Kommentar sagt.


Kein Unterschied als solches.
Convert.ToInt32() ruft int.Parse() auf intern

Bis auf eine Sache Convert.ToInt32() gibt 0 zurück wenn das Argument null ist

Ansonsten funktionieren beide gleich