Sztring átalakítása számmá (C# programozási útmutató)
Számmá alakíthatja string
a számokat a Parse
TryParse
numerikus típusok (int
stb.) meghívásával, long
double
vagy az System.Convert osztály metódusainak használatával.
Egy metódus (például) vagy Parse
metódus (példáulvar number = int.Parse("11")
int.TryParse("11", out number)
) meghívása TryParse
valamivel hatékonyabb és egyszerűbb. Convert A metódus használata hasznosabb a implementálható IConvertibleáltalános objektumok esetében.
A sztring által várt numerikus típust vagy metódusokat használjaParse
, például a típustSystem.Int32.TryParse
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
mindig kivételkezelést kell használnia az FormatException elemzési művelet meghiúsulása esetén.
Elemzési vagy TryParse metódusok meghívása
A Parse
metódusok figyelmen TryParse
kívül hagyják a sztring elején és végén lévő üres szóközt, de minden más karakternek a megfelelő numerikus típust (int
, , , ulong
long
, float
stbdecimal
.) alkotó karaktereknek kell lennie. A számot formázó sztringen belüli üres szóköz hibát okoz. Használhatja például a "10", decimal.TryParse
a "10,3" vagy a " 10 " elemzését, de ezzel a módszerrel nem elemezheti a 10-et a "10X", "1 0" (jegyezze fel a beágyazott területet), a "10.3" (jegyezze fel a beágyazott területet), a "10e1" (float.TryParse
itt működik), és így tovább. Olyan sztring, null
String.Empty amelynek értéke vagy nem elemezheti 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 metódus meghívása TryParse előtt egy sztring elejétől érvényes karaktereket rendel egy új sztringhez. 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 meghívja a metódust egy Convert.ToInt32(String) bemeneti sztring intre való konvertálásához. A példa a módszer által leggyakrabban alkalmazott két kivételt fogja meg: FormatException ésOverflowException. 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 {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
Sztring számmá alakítása a GitHub Copilot használatával
Az IDE-ben a GitHub Copilot használatával kódot hozhat létre egy sztring számmá alakításához C#-ban.
Ha a Visual Studio 2022 17.8-s vagy újabb verzióját használja, kipróbálhatja a Visual Studióban az AI-alapú GitHub Copilotot, hogy egy sztringet számmá alakítson. Küldje el kérdését kérdésként a Copilot csevegőablakában, ahogyan az alábbi példában is látható. A szerkesztőablakban beágyazott csevegéssel is küldhet kéréseket.
Feljegyzés
A GitHub Copilot mesterséges intelligenciával működik, így meglepetések és hibák lehetségesek. Ellenőrizze a létrehozott kódot vagy javaslatokat. A GitHub Copilot általános használatáról, a termék hatásáról, az emberi felügyeletről és az adatvédelemről további információt a GitHub Copilot gyakori kérdések című témakörében talál.
Az alábbi szöveg egy példakérést jelenít meg a Copilot-csevegéshez:
C#-kód létrehozása a "123" sztring számmá alakításához a TryParse használatával. Adjon meg példakimenetet.
A kérés testre szabható, hogy a követelményeknek megfelelően sztringet használjon.
A csevegési funkciók, például perjelparancsok, fájlokra, metódusokra, osztályokra és szálakra mutató hivatkozások használatával szándékot állíthat be, és jobb válaszokat kaphat a hatókörrel rendelkező környezettel. Az IDE-ben megnyitott meglévő fájlok esetén a GitHub Copilotot inline csevegéssel /generate code to convert the string string1 in #Filename to a number
kérheti.
Az alábbi kimenet egy példa Copilot Chat-választ mutat be:
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
Amikor a Copilot egy kódblokkot ad vissza, a válasz tartalmazza a kód másolásának, a kód új fájlba való beszúrásának vagy a kód kimenetének előnézetét.
Feljegyzés
Az eredmények eltérhetnek a példaválaszokban láthatótól. Az AI-modellek nem determinisztikusak, ami azt jelenti, hogy eltérő válaszokat adhatnak vissza, ha ugyanazt a kérdést teszik fel. Ennek oka lehet a további tanulás és alkalmazkodás az idő függvényében, a nyelvi változat, a kontextus változásai, például a csevegési előzmények stb.
További információk: