Jak převést řetězec na číslo (Průvodce programováním v C#)
Převedete číslo string
voláním Parse
nebo TryParse
metodou nalezenou u číselných typů (int
, long
, double
atd.) nebo pomocí metod ve System.Convert třídě.
Volání metody (například) nebo Parse
metody (napříkladvar number = int.Parse("11")
) je o něco efektivnější a jednodušší TryParse
. int.TryParse("11", out number)
Convert Použití metody je užitečnější pro obecné objekty, které implementují IConvertible.
U číselného typu, který očekáváte, že řetězec obsahuje, například System.Int32 typ, použijete Parse
nebo TryParse
použijete metody. Metoda Convert.ToInt32 se používá Parse interně. Metoda Parse
vrátí převedené číslo; TryParse
metoda vrátí logickou hodnotu, která určuje, zda byl převod úspěšný, a vrátí převedené číslo v parametru out
. Pokud řetězec není v platném formátu, Parse
vyvolá výjimku, ale TryParse
vrátí false
hodnotu . Při volání Parse
metody byste měli při selhání operace analýzy vždy použít zpracování FormatException výjimek.
Volání metod Parse nebo TryParse
TryParse
Metody Parse
ignorují prázdné znaky na začátku a na konci řetězce, ale všechny ostatní znaky musí být znaky, které tvoří příslušný číselný typ (int
, , long
, ulong
float
, decimal
atd.). Jakékoli prázdné znaky v řetězci, který tvoří číslo, způsobí chybu. Můžete například použít k parsování "10", "10,3" nebo " 10 ", ale tuto metodu nemůžete použít decimal.TryParse
k parsování 10 z "10X", "1 0" (všimněte si vloženého prostoru), "10 ,3" (poznámka: vložené místo), "10e1" (float.TryParse
pracuje zde) atd. Řetězec, jehož hodnota je null
nebo String.Empty se nepodaří úspěšně analyzovat. Před pokusem o jeho parsování můžete zkontrolovat hodnotu null nebo prázdný řetězec voláním String.IsNullOrEmpty metody.
Následující příklad ukazuje úspěšné i neúspěšná volání a Parse
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.
}
}
Následující příklad ukazuje jeden přístup k analýze řetězce, u které se očekává, že bude obsahovat počáteční číselné znaky (včetně šestnáctkových znaků) a koncové nečíselné znaky. Před voláním TryParse metody přiřadí k novému řetězci platné znaky od začátku řetězce. Vzhledem k tomu, že řetězce, které mají být analyzovány, obsahují několik znaků, příklad volá metodu String.Concat pro přiřazení platných znaků k novému řetězci. Pro větší řetězec StringBuilder lze místo toho použít třídu.
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
}
}
Volání metod Convert
Následující tabulka uvádí některé metody z Convert třídy, které můžete použít k převodu řetězce na číslo.
Číselný typ | metoda |
---|---|
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) |
Následující příklad volá metodu Convert.ToInt32(String) pro převod vstupního řetězce na int. Příklad zachytí dvě nejběžnější výjimky vyvolané touto metodou: FormatException a OverflowException. Pokud je možné výsledné číslo zvýšit bez překročení Int32.MaxValue, přidá příklad k výsledku hodnotu 1 a zobrazí výstup.
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
Převod řetězce na číslo pomocí GitHub Copilotu
Pomocí GitHub Copilotu v integrovaném vývojovém prostředí (IDE) můžete vygenerovat kód pro převod řetězce na číslo v jazyce C#.
Pokud používáte Visual Studio 2022 verze 17.8 nebo novější, můžete zkusit v sadě Visual Studio vygenerovat kód pro převod řetězce na číslo pomocí githubového copilotu řízeného AI. Odešlete otázku jako výzvu v okně chatu Copilot, jak je znázorněno v následujícím příkladu. Můžete také odesílat výzvy pomocí vloženého chatu v samotném okně editoru.
Poznámka:
GitHub Copilot využívá technologii AI, takže jsou možná překvapení a chyby. Nezapomeňte ověřit vygenerovaný kód nebo návrhy. Další informace o obecném použití GitHub Copilotu, dopadu produktu, lidského dohledu a ochrany osobních údajů najdete v nejčastějších dotazech ke Kopírování GitHubu.
Následující text ukazuje příklad výzvy ke kopírování chatu:
Vygenerujte kód jazyka C#, který převede řetězec "123" na číslo pomocí tryParse. Zadejte příklad výstupu.
Výzvu můžete přizpůsobit tak, aby používala řetězec podle vašich požadavků.
Pomocí funkcí chatu, jako jsou příkazy lomítka, odkazy na soubory, metody nebo třídy a vlákna, můžete nastavit záměr a získat lepší odpovědi s vymezeným kontextem. U existujícího souboru, který je otevřený v integrovaném vývojovém prostředí, můžete pomocí vloženého chatu /generate code to convert the string string1 in #Filename to a number
zobrazit příkaz GitHub Copilot .
Následující výstup ukazuje příklad odpovědi copilot chatu:
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
Když Copilot vrátí blok kódu, odpověď obsahuje možnosti pro zkopírování kódu, vložení kódu do nového souboru nebo náhled výstupu kódu.
Poznámka:
Výsledky se můžou lišit od toho, co se zobrazuje v ukázkových odpovědích. Modely AI nejsou deterministické, což znamená, že při kladení stejné otázky můžou vrátit různé odpovědi. Důvodem může být další učení a přizpůsobení v průběhu času, jazykové variace, změny v kontextu, například historie chatu a další.
Další informace naleznete v tématu: