Konvertera en sträng till ett tal (C#-programmeringsguide)
Du konverterar en string
till ett tal genom att anropa Parse
metoden eller TryParse
som finns på numeriska typer (int
, long
, double
och så vidare) eller med hjälp av metoder i System.Convert klassen.
Det är lite mer effektivt och enkelt att anropa en TryParse
metod (till exempel int.TryParse("11", out number)
) eller Parse
-metod (till exempel var number = int.Parse("11")
). Att använda en Convert metod är mer användbart för allmänna objekt som implementerar IConvertible.
Du använder Parse
eller TryParse
metoder för den numeriska typ som du förväntar dig att strängen innehåller, till exempel System.Int32 typen . Metoden Convert.ToInt32 använder Parse internt. Metoden Parse
returnerar det konverterade talet. TryParse
Metoden returnerar ett booleskt värde som anger om konverteringen lyckades och returnerar det konverterade talet i en out
parameter. Om strängen inte är i ett giltigt format Parse
genererar ett undantag, men TryParse
returnerar false
. När du anropar en Parse
metod bör du alltid använda undantagshantering för att fånga en FormatException när parsningsåtgärden misslyckas.
Anropa parsnings- eller TryParse-metoder
Metoderna Parse
och TryParse
ignorerar blanksteg i början och i slutet av strängen, men alla andra tecken måste vara tecken som utgör lämplig numerisk typ (int
, long
, ulong
, float
, decimal
och så vidare). Ett tomt utrymme i strängen som utgör talet orsakar ett fel. Du kan till exempel använda decimal.TryParse
för att parsa "10", "10.3" eller " 10 ", men du kan inte använda den här metoden för att parsa 10 från "10X", "1 0" (notera det inbäddade utrymmet), "10 .3" (observera det inbäddade utrymmet), "10e1" (float.TryParse
fungerar här) och så vidare. En sträng vars värde är null
eller String.Empty inte kan parsas. Du kan söka efter en null- eller tom sträng innan du försöker parsa den genom att anropa String.IsNullOrEmpty metoden.
I följande exempel visas både lyckade och misslyckade anrop till Parse
och 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.
}
}
I följande exempel visas en metod för att parsa en sträng som förväntas innehålla inledande numeriska tecken (inklusive hexadecimala tecken) och avslutande icke-numeriska tecken. Den tilldelar giltiga tecken från början av en sträng till en ny sträng innan metoden anropas TryParse . Eftersom strängarna som ska parsas innehåller några tecken anropar String.Concat exemplet metoden för att tilldela giltiga tecken till en ny sträng. För en större sträng StringBuilder kan klassen användas i stället.
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
}
}
Anropa konvertera metoder
I följande tabell visas några av metoderna från klassen Convert som du kan använda för att konvertera en sträng till ett tal.
Numerisk typ | Metod |
---|---|
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) |
I följande exempel anropas Convert.ToInt32(String) metoden för att konvertera en indatasträng till en int. Exemplet fångar de två vanligaste undantagen som genereras av den här metoden: FormatException och OverflowException. Om det resulterande talet kan ökas utan att överskrida Int32.MaxValuelägger exemplet till 1 i resultatet och visar utdata.
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
Använd GitHub Copilot för att konvertera en sträng till ett tal
Du kan använda GitHub Copilot i din IDE för att generera kod för att konvertera en sträng till ett tal i C#.
Om du använder Visual Studio 2022 version 17.8 eller senare kan du prova den AI-drivna GitHub Copilot i Visual Studio för att generera kod för att konvertera en sträng till ett tal. Skicka din fråga som en uppmaning i Chattfönstret för Copilot, som i följande exempel. Du kan också skicka frågor med hjälp av infogad chatt i själva redigeringsfönstret.
Kommentar
GitHub Copilot drivs av AI, så överraskningar och misstag är möjliga. Kontrollera eventuell genererad kod eller förslag. Mer information om allmän användning av GitHub Copilot, produktpåverkan, mänsklig tillsyn och sekretess finns i Vanliga frågor och svar om GitHub Copilot.
Följande text visar en exempelfråga för Copilot Chat:
Generera C#-kod för att konvertera strängen "123" till ett tal med hjälp av TryParse. Ange exempelutdata.
Du kan anpassa uppmaningen så att den använder en sträng enligt dina behov.
Du kan använda chattfunktioner, till exempel snedstreckskommandon, referenser till filer, metoder eller klasser och trådar, för att ange avsikt och få bättre svar med begränsad kontext. För en befintlig fil som är öppen i IDE kan du uppmana GitHub Copilot att använda infogad chatt med /generate code to convert the string string1 in #Filename to a number
.
Följande utdata visar ett exempel på Copilot Chat-svar:
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
När Copilot returnerar ett kodblock innehåller svaret alternativ för att kopiera koden, infoga koden i en ny fil eller förhandsgranska kodutdata.
Kommentar
Dina resultat kan skilja sig från vad som visas i exempelsvaren. AI-modeller är icke-deterministiska, vilket innebär att de kan returnera olika svar när de får samma fråga. Detta kan bero på ytterligare inlärning och anpassning över tid, språkvariationer, ändringar i kontexten, till exempel din chatthistorik med mera.
Mer information finns i: