Gewusst wie: Konvertieren einer Zeichenfolge in eine Zahl (C#-Programmierhandbuch)How to: Convert a String to a Number (C# Programming Guide)

Sie können eine Zeichenfolge mithilfe von Methoden in der Convert-Klasse oder durch die Verwendung der TryParse-Methode, die in verschiedenen numerischen Typen (int, long, float usw.) Anwendung findet, in eine Zahl umwandeln.You can convert a string to a number by using methods in the Convert class or by using the TryParse method found on the various numeric types (int, long, float, etc.).

Wenn Sie über eine Zeichenfolge verfügen, ist es etwas effizienter und einfacher, eine TryParse-Methode (beispielsweise int.TryParse("11")) aufzurufen.If you have a string, it is slightly more efficient and straightforward to call a TryParse method (for example, int.TryParse("11")). Die Verwendung einer Convert-Methode eignet sich eher für allgemeine Objekte, die IConvertible implementieren.Using a Convert method is more useful for general objects that implement IConvertible.

Sie können die Methode Parse oder TryParse für den numerischen Typ verwenden, den Sie in der Zeichenfolge erwarten, beispielsweise den System.Int32-Typ.You can use Parse or TryParse methods on the numeric type you expect the string contains, such as the System.Int32 type. Die Convert.ToUInt32-Methode verwendet Parse intern.The Convert.ToUInt32 method uses Parse internally. Wenn die Zeichenfolge in keinem gültigen Format vorliegt, löst Parse eine Ausnahme aus, während TryParse false zurückgibt.If the string is not in a valid format, Parse throws an exception whereas TryParse returns false.

BeispielExample

Die Methoden Parse und TryParse ignorieren Leerraum 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.).The Parse and TryParse methods ignore white space at the beginning and at the end of the string, but all other characters must be characters that form the appropriate numeric type (int, long, ulong, float, decimal, etc.). Leerraum innerhalb der Zeichen, die die Zahl bilden, führen zu einem Fehler.Any white space within the characters that form the number cause an error. 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.For example, you can use decimal.TryParse to parse "10", "10.3", " 10 ", but you cannot use this method to parse 10 from "10X", "1 0" (note space), "10 .3" (note space), "10e1" (float.TryParse works here), and so on.

Die unten stehenden Beispiele zeigen erfolgreiche sowie nicht erfolgreiche Aufrufe von Parse und TryParse.The examples below demonstrate both successful and unsuccessful calls to Parse and 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());

BeispielExample

In der folgenden Tabelle werden einige der Methoden aus der Convert-Klasse aufgelistet, die Sie verwenden können.The following table lists some of the methods from the Convert class that you can use.

Numerischer TypNumeric Type MethodeMethod
decimal ToDecimal(String)
float ToSingle(String)
double ToDouble(String)
short ToInt16(String)
int ToInt32(String)
long ToInt64(String)
ushort ToUInt16(String)
uint ToUInt32(String)
ulong ToUInt64(String)

In diesem Beispiel wird die Convert.ToInt32(String)-Methode aufgerufen, um einen Eingabe-string in einen int-Datentyp zu konvertieren.This example calls the Convert.ToInt32(String) method to convert an input string to an int . Der Code fängt die zwei häufigsten Ausnahmen ab, die von dieser Methode ausgelöst werden können: FormatException und OverflowException.The code catches the two most common exceptions that can be thrown by this method, FormatException and 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.If the number can be incremented without overflowing the integer storage location, the program adds 1 to the result and prints the output.

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 auchSee Also

TypenTypes
Gewusst wie: Bestimmen, ob eine Zeichenfolge einen numerischen Wert darstelltHow to: Determine Whether a String Represents a Numeric Value
.NET Framework 4-Hilfsprogramm zur Formatierung.NET Framework 4 Formatting Utility