Vorgehensweise: Konvertieren einer Zeichenfolge in eine Zahl (C#-Programmierleitfaden)
string
wird in eine Zahl umgewandelt, indem Sie die Methode Parse
oder TryParse
für numerische Typen (z. B. int
, long
und double
) oder Methoden in der System.Convert-Klasse aufrufen.
Es ist etwas effizienter und einfacher, eine TryParse
-Methode (beispielsweise int.TryParse("11", out number)
) oder eine Parse
-Methode (beispielsweise var number = int.Parse("11")
) aufzurufen. Die Verwendung einer Convert-Methode eignet sich eher für allgemeine Objekte, die IConvertible implementieren.
Sie können die Methode Parse
oder TryParse
für den numerischen Typ verwenden, den Sie in der Zeichenfolge erwarten, z. B. den Typ System.Int32. Die Convert.ToInt32-Methode verwendet Parse intern. Die Parse
-Methode gibt die konvertierte Zahl zurück, und die TryParse
-Methode gibt einen booleschen Wert zurück, der angibt, ob die Konvertierung erfolgreich war. Anschließend wird die konvertierte Zahl in einem out
-Parameter zurückgegeben. Wenn die Zeichenfolge in keinem gültigen Format vorliegt, löst Parse
eine Ausnahme aus, jedoch gibt TryParse
den Wert false
zurück. Beim Aufrufen einer Parse
-Methode sollten Sie grundsätzlich die Ausnahmebehandlung zum Abfangen einer FormatException verwenden, falls beim Analysevorgang ein Fehler auftritt.
Aufrufen der Parse- oder TryParse-Methode
Die Methoden Parse
und TryParse
ignorieren Leerraum am Anfang und am Ende der Zeichenfolge. Alle anderen Zeichen müssen jedoch Zeichen sein, die den entsprechenden numerischen Typ bilden (int
, long
, ulong
, float
, decimal
usw.). Leerraum innerhalb der Zeichenfolge, die die Zahl bildet, führt zu einem Fehler. Beispielsweise können Sie decimal.TryParse
verwenden, um „10“, „10.3“ oder „ 10 “ zu parsen. Sie können diese Methode jedoch nicht verwenden, um 10 beispielsweise aus „10X“, „1 0“ (beachten Sie das eingebettete Leerzeichen), „10 .3“ (beachten Sie das eingebettete Leerzeichen) oder „10e1“ (float.TryParse
funktioniert in diesem Fall) zu parsen. Eine Zeichenfolge, deren Wert null
oder String.Empty lautet, wird nicht erfolgreich analysiert. Durch Aufruf der String.IsNullOrEmpty-Methode können Sie auf eine NULL-Zeichenfolge oder eine leere Zeichenfolge prüfen, bevor Sie den Analyseversuch starten.
Das folgende Beispiel zeigt sowohl erfolgreiche als auch nicht erfolgreiche Aufrufe von Parse
und TryParse
.
using System;
public static class StringConversion
{
public static void Main()
{
string input = String.Empty;
try
{
int result = Int32.Parse(input);
Console.WriteLine(result);
}
catch (FormatException)
{
Console.WriteLine($"Unable to parse '{input}'");
}
// Output: Unable to parse ''
try
{
int numVal = Int32.Parse("-105");
Console.WriteLine(numVal);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: -105
if (Int32.TryParse("-105", out int 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.
const string inputString = "abc";
if (Int32.TryParse(inputString, out int numValue))
{
Console.WriteLine(numValue);
}
else
{
Console.WriteLine($"Int32.TryParse could not parse '{inputString}' to an int.");
}
// Output: Int32.TryParse could not parse 'abc' to an int.
}
}
Das folgende Beispiel veranschaulicht einen Ansatz zum Analysieren einer Zeichenfolge, von der erwartet wird, dass sie führende numerische Zeichen (einschließlich Hexadezimalzeichen) und nachstehende nicht numerische Zeichen enthält. Vor dem Aufruf der TryParse-Methode werden gültige Zeichen vom Anfang einer Zeichenfolge einer neuen Zeichenfolge zugewiesen. Da die zu analysierenden Zeichenfolgen einige Zeichen enthalten, wird im Beispiel die String.Concat-Methode aufgerufen, um einer neuen Zeichenfolge gültige Zeichen zuzuweisen. Für eine umfangreichere Zeichenfolge kann stattdessen die StringBuilder-Klasse verwendet werden.
using System;
public static class StringConversion
{
public static void Main()
{
var str = " 10FFxxx";
string numericString = string.Empty;
foreach (var c in str)
{
// Check for numeric characters (hex in this case) or leading or trailing spaces.
if ((c >= '0' && c <= '9') || (char.ToUpperInvariant(c) >= 'A' && char.ToUpperInvariant(c) <= 'F') || c == ' ')
{
numericString = string.Concat(numericString, c.ToString());
}
else
{
break;
}
}
if (int.TryParse(numericString, System.Globalization.NumberStyles.HexNumber, null, out int i))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {i}");
}
// Output: ' 10FFxxx' --> ' 10FF' --> 4351
str = " -10FFXXX";
numericString = "";
foreach (char c in str)
{
// Check for numeric characters (0-9), a negative sign, or leading or trailing spaces.
if ((c >= '0' && c <= '9') || c == ' ' || c == '-')
{
numericString = string.Concat(numericString, c);
}
else
{
break;
}
}
if (int.TryParse(numericString, out int j))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {j}");
}
// Output: ' -10FFXXX' --> ' -10' --> -10
}
}
Aufrufen von Convert-Methoden
In der folgenden Tabelle werden einige der Methoden aus der Convert-Klasse aufgelistet, die Sie zum Konvertieren einer Zeichenfolge in eine Zahl verwenden können.
Numerischer Typ | Methode |
---|---|
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 eine Eingabezeichenfolge in einen int-Typ zu konvertieren. Das Beispiel fängt die zwei häufigsten Ausnahmen ab, die von dieser Methode ausgelöst werden können: FormatException und OverflowException. Wenn die resultierende Zahl schrittweise erhöht werden kann, ohne Int32.MaxValue zu überschreiten, fügt der Beispielcode dem Ergebnis 1 hinzu und zeigt die Ausgabe an.
using System;
public class ConvertStringExample1
{
static void Main(string[] args)
{
int numVal = -1;
bool repeat = true;
while (repeat)
{
Console.Write("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);
if (numVal < Int32.MaxValue)
{
Console.WriteLine("The new value is {0}", ++numVal);
}
else
{
Console.WriteLine("numVal cannot be incremented beyond its current value");
}
}
catch (FormatException)
{
Console.WriteLine("Input string is not a sequence of digits.");
}
catch (OverflowException)
{
Console.WriteLine("The number cannot fit in an Int32.");
}
Console.Write("Go again? Y/N: ");
string? go = Console.ReadLine();
if (go?.ToUpper() != "Y")
{
repeat = false;
}
}
}
}
// 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
Verwenden von GitHub Copilot zum Konvertieren einer Zeichenfolge in eine Zahl
Sie können GitHub Copilot in Ihrer IDE verwenden, um Code zu generieren, um eine Zeichenfolge in eine Zahl in C# zu konvertieren.
Wenn Sie Visual Studio 2022, Version 17.8 oder höher, verwenden, können Sie versuchen, den AI-gesteuerten GitHub Copilot in Visual Studio zu testen, um Code zu generieren, um eine Zeichenfolge in eine Zahl zu konvertieren. Reichen Sie im Chat-Fenster von Copilot Ihre Frage als Eingabeaufforderung ein. Sehen Sie sich hierzu das folgende Beispiel an. Sie können Eingabeaufforderungen auch über den Inline-Chat im Editorfenster senden.
Hinweis
GitHub Copilot wird von KI unterstützt. Daher sind Überraschungen und Fehler möglich. Überprüfen Sie jeden generierten Code oder alle Vorschläge. Weitere Informationen zur allgemeinen Verwendung von GitHub Copilot, zu den Auswirkungen des Produkts, zur menschlichen Aufsicht und zum Datenschutz finden Sie unter Häufig gestellte Fragen zu GitHub Copilot.
Der folgende Text zeigt eine Beispielaufforderung für Copilot Chat:
Generieren Sie C#-Code, um die Zeichenfolge "123" mithilfe von TryParse in eine Zahl zu konvertieren. Ein Beispiel für eine Ausgabe bereitstellen.
Sie können die Eingabeaufforderung anpassen, um eine Zeichenfolge gemäß Ihren Anforderungen zu verwenden.
Sie können Chat-Funktionen wie Slash-Befehle, Verweise auf Dateien, Methoden oder Klassen sowie Threads verwenden, um eine Absicht festzulegen und bessere Antworten mit bereichsbezogenem Kontext zu erhalten. Für eine vorhandene Datei, die in der IDE geöffnet ist, können Sie GitHub Copilot mithilfe von Inlinechats auffordern /generate code to convert the string string1 in #Filename to a number
.
Die folgende Ausgabe zeigt ein Beispiel für eine Copilot Chat-Antwort:
Here is a C# code snippet to convert the string "123" to a number using TryParse:
using System;
class Program
{
static void Main()
{
string numberString = "123";
int number;
bool success = int.TryParse(numberString, out number);
if (success)
{
// Example output
Console.WriteLine("The converted number is: " + number);
}
else
{
Console.WriteLine("Conversion failed.");
}
}
}
When you run this code, the output will be:
The converted number is: 123
Wenn Copilot einen Codeblock zurückgibt, dann werden in der Antwort Optionen zum Kopieren des Codes, zum Einfügen des Codes in eine neue Datei oder zum Anzeigen einer Vorschau des Codes aufgelistet.
Hinweis
Die Ergebnisse können möglicherweise von den in diesen Beispielantworten gezeigten Ergebnissen abweichen. KI-Modelle sind nicht deterministisch. Das bedeutet, dass sie auf die gleiche Frage verschiedene Antworten zurückgeben können. Dies kann auf zusätzliche Lernaktivitäten und Anpassung im Laufe der Zeit, Sprachvariation, Änderungen im Kontext, wie z. B. Ihren Chatverlauf und viele weiter Faktoren zurückzuführen sein.
Weitere Informationen finden Sie unter:
- GitHub Copilot Trust Center
- GitHub Copilot in Visual Studio
- GitHub Copilot in VS Code