Gewusst wie: Konvertieren einer Zeichenfolge in eine Zahl (C#-Programmierhandbuch)

Sie können eine Zeichenfolge mithilfe von Methoden in der <xref:System.Convert>-Klasse oder durch die Verwendung der TryParse-Methode, die in verschiedenen numerischen Typen (int, long, float usw.) Anwendung findet, in eine Zahl umwandeln.

Wenn Sie über eine Zeichenfolge verfügen, ist es etwas effizienter und einfacher, eine TryParse-Methode (beispielsweise int.TryParse("11")) aufzurufen. Die Verwendung einer Convert-Methode eignet sich eher für allgemeine Objekte, die <xref:System.IConvertible> implementieren.

Sie können die Methode Parse oder TryParse für den numerischen Typ verwenden, den Sie in der Zeichenfolge erwarten, beispielsweise den <xref:System.Int32?displayProperty=fullName>-Typ. Die <xref:System.Convert.ToUInt32%2A?displayProperty=fullName>-Methode verwendet <xref:System.Int32.Parse%2A> intern. Wenn die Zeichenfolge in keinem gültigen Format vorliegt, löst Parse eine Ausnahme aus, während TryParse false zurückgibt.

Beispiel

Die Methoden Parse und TryParse ignorieren Leerzeichen am Anfang und Ende der Zeichenfolge. Alle anderen Zeichen müssen jedoch Zeichen sein, die den entsprechenden numerischen Typ bilden (int, long, ulong, float, decimal usw.). Leerzeichen in den die Zahl bildenden Zeichen führen zu einem Fehler. Beispielsweise können Sie decimal.TryParse verwenden, um „10“, „10.3“, „ 10 „ zu analysieren. Sie können diese Methode jedoch nicht verwenden, um 10 aus „10X“, „1 0“ (beachten Sie das Leerzeichen), „10 .3“ (beachten Sie das Leerzeichen), „10e1“ (float.TryParse funktioniert in diesem Fall) usw. zu analysieren.

Die unten stehenden Beispiele zeigen erfolgreiche sowie nicht erfolgreiche Aufrufe von Parse und TryParse.

using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
int numVal = Int32.Parse("-105");
Console.WriteLine(numVal);
// Output: -105
// TryParse returns true if the conversion succeeded
// and stores the result in j.
int j;
if (Int32.TryParse("-105", out j))
    Console.WriteLine(j);
else
    Console.WriteLine("String could not be parsed.");
// Output: -105
try
{
    int m = Int32.Parse("abc");
}
catch (FormatException e)
{
    Console.WriteLine(e.Message);
}
// Output: Input string was not in a correct format.
string inputString = "abc";
int numValue;
bool parsed = Int32.TryParse(inputString, out numValue);

if (!parsed)
    Console.WriteLine("Int32.TryParse could not parse '{0}' to an int.\n", inputString);

// Output: Int32.TryParse could not parse 'abc' to an int.
// This snippet shows a couple of examples that extract number characters from the
// beginning of the string to avoid TryParse errors.
StringBuilder sb = new StringBuilder();
var str = "  10FFxxx";
foreach (char c in str) {
    // Check for numeric characters (hex in this case).  Add "." and "e" if float,
    // and remove letters.  Include initial space because it is harmless.
    if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f') || c == ' ') {
        sb.Append(c);
    }
    else
        break;
}
if (int.TryParse(sb.ToString(), System.Globalization.NumberStyles.HexNumber, null, out i))
    Console.WriteLine(sb.ToString());

str = "   -10FFXXX";
sb.Clear();
foreach (char c in str) {
    // Check for numeric characters (allow negative in this case but no hex digits). 
    // Though we use int.TryParse in the previous example and this one, int.TryParse does NOT
    // allow a sign character (-) AND hex digits at the same time.
    // Include initial space because it is harmless.
    if ((c >= '0' && c <= '9') || c == ' ' || c == '-') {
        sb.Append(c);
    } else
        break;
}
if (int.TryParse(sb.ToString(), out i))
    Console.WriteLine(sb.ToString());

Beispiel

In der folgenden Tabelle werden einige der Methoden aus der <xref:System.Convert>-Klasse aufgelistet, die Sie verwenden können.

Numerischer Typ Methode
decimal <xref:System.Convert.ToDecimal%28System.String%29>
float <xref:System.Convert.ToSingle%28System.String%29>
double <xref:System.Convert.ToDouble%28System.String%29>
short <xref:System.Convert.ToInt16%28System.String%29>
int <xref:System.Convert.ToInt32%28System.String%29>
long <xref:System.Convert.ToInt64%28System.String%29>
ushort <xref:System.Convert.ToUInt16%28System.String%29>
uint <xref:System.Convert.ToUInt32%28System.String%29>
ulong <xref:System.Convert.ToUInt64%28System.String%29>

In diesem Beispiel wird die <xref:System.Convert.ToInt32%28System.String%29?displayProperty=fullName>-Methode aufgerufen, um einen Eingabe-string in einen int-Datentyp zu konvertieren. Der Code fängt die zwei häufigsten Ausnahmen ab, die von dieser Methode ausgelöst werden können: <xref:System.FormatException> und <xref:System.OverflowException>. Wenn die Zahl inkrementiert werden kann, ohne dass der integer-Speicherbereich überläuft, fügt das Programm dem Ergebnis 1 hinzu und druckt die Ausgabe.

using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
static void Main(string[] args)
{
    int numVal = -1;
    bool repeat = true;

    while (repeat)
    {
        Console.WriteLine("Enter a number between −2,147,483,648 and +2,147,483,647 (inclusive).");

        string input = Console.ReadLine();

        // ToInt32 can throw FormatException or OverflowException.
        try
        {
            numVal = Convert.ToInt32(input);
        }
        catch (FormatException e)
        {
            Console.WriteLine("Input string is not a sequence of digits.");
        }
        catch (OverflowException e)
        {
            Console.WriteLine("The number cannot fit in an Int32.");
        }
        finally
        {
            if (numVal < Int32.MaxValue)
            {
                Console.WriteLine("The new value is {0}", numVal + 1);
            }
            else
            {
                Console.WriteLine("numVal cannot be incremented beyond its current value");
            }
        }
        Console.WriteLine("Go again? Y/N");
        string go = Console.ReadLine();
        if (go == "Y" || go == "y")
        {
            repeat = true;
        }
        else
        {
            repeat = false;
        }
    }
    // Keep the console open in debug mode.
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();    
}
// Sample Output:
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive).
// 473
// The new value is 474
// Go again? Y/N
// y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive).
// 2147483647
// numVal cannot be incremented beyond its current value
// Go again? Y/N
// Y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive).
// -1000
// The new value is -999
// Go again? Y/N
// n
// Press any key to exit.

Siehe auch

Typen
Vorgehensweise: Bestimmen, ob eine Zeichenfolge einen numerischen Wert darstellt
.NET Framework 4-Hilfsprogramm zur Formatierung