Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Számmá alakíthatja a string
-t úgy, hogy meghívja a Parse
vagy TryParse
metódusokat, amelyeket numerikus típusokon találhat (int
, long
, double
stb.), vagy az System.Convert osztály metódusait használja.
Egy TryParse
metódus meghívása (például int.TryParse("11", out number)
) vagy egy Parse
metódus (például var number = int.Parse("11")
) meghívása valamivel hatékonyabb és egyszerűbb.
Convert metódus használata hasznosabb az általános objektumok esetében, amelyek implementálják a IConvertible-t.
A numerikus típuson alkalmaz ható Parse
vagy TryParse
metódusokat használja, amelyekre számít, hogy a sztring tartalmazza, például az System.Int32 típust. A Convert.ToInt32 metódus belsőleg használ Parse . A Parse
metódus a konvertált számot adja vissza; a TryParse
metódus egy logikai értéket ad vissza, amely jelzi, hogy az átalakítás sikeres volt-e, és egy paraméterben out
visszaadja az átalakított számot. Ha a sztring nem érvényes formátumban van, Parse
kivételt jelez, de TryParse
visszaadja false
. Metódus meghívásakor Parse
érdemes kivételkezelést alkalmazni, ha az FormatException elemzési művelet sikertelen.
Borravaló
Az AI-segítség segítségével számmá alakíthat egy sztringet.
Hívd meg a Parse vagy TryParse metódusokat
A Parse
és TryParse
metódus figyelmen kívül hagyja a sztring elején és végén lévő üres szóközt, de minden más karakternek a megfelelő numerikus típust alkotó karaktereknek kell lennie (int
, long
, ulong
, float
, decimal
, stb.). A számot formázó sztringen belüli üres szóköz hibát okoz. Például használhatja a decimal.TryParse
segítségével a "10", "10.3" vagy " 10 " elemzésére, de ezzel a módszerrel nem tudja elemezni a 10-et a "10X", "1 0" (vegye figyelembe a beágyazott szóközt), a "10 .3" (vegye figyelembe a beágyazott szóközt), "10e1" (ehhez float.TryParse
működik), és így tovább. Az a sztring, amelynek értéke null
vagy String.Empty, nem dolgozható fel sikeresen. A metódus meghívásával ellenőrizheti, hogy van-e null vagy üres sztring, mielőtt megkísérelné elemezni.String.IsNullOrEmpty
Az alábbi példa a sikeres és sikertelen hívásokat Parse
TryParse
mutatja be.
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.
}
}
Az alábbi példa egy olyan sztring elemzésének egyik megközelítését szemlélteti, amely az első numerikus karaktereket (beleértve a hexadecimális karaktereket) és a záró nem numerikus karaktereket is magában foglalja. A TryParse metódus meghívása előtt a karaktersorozat elejétől érvényes karaktereket rendel egy új karaktersorozathoz. Mivel az elemezni kívánt sztringek néhány karaktert tartalmaznak, a példa meghívja a String.Concat metódust, hogy érvényes karaktereket rendeljen egy új sztringhez. Nagyobb sztring esetén az StringBuilder osztály használható helyette.
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
}
}
Konvertálási metódusok meghívása
Az alábbi táblázat felsorol néhány metódust az Convert osztályból, amelyekkel sztringet alakíthat számmá.
Numerikus típus | Metódus |
---|---|
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) |
Az alábbi példa a Convert.ToInt32(String) metódust hívja meg egy bemeneti sztring egész számra (int) konvertálására. A példa a metódus által leggyakrabban kiváltott két kivételt kezeli: FormatException és OverflowException. Ha az eredményül kapott szám túllépése Int32.MaxValuenélkül növelhető, a példa 1-et ad hozzá az eredményhez, és megjeleníti a kimenetet.
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 {++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
Sztring számmá alakítása AI használatával
Az AI-eszközök, például a GitHub Copilot használatával C#-kódot hozhat létre egy sztring számmá alakításához. A kérés testreszabható, hogy a követelményeknek megfelelően karakterláncot használjon.
Az alábbi szöveg egy példakérést jelenít meg a Copilot-csevegéshez:
Show me how to parse a string as a number, but don't throw an exception if the input string doesn't represent a number.
A GitHub Copilot mesterséges intelligenciával működik, így meglepetések és hibák lehetségesek. További információ: Copilot gyakori kérdések.