Dela via


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, doubleoch 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, decimaloch 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.

Skärmbild som visar hur du använder GitHub Copilot Chat i Visual Studio för att konvertera en sträng till ett tal.

Mer information finns i: