Delen via


Een tekenreeks converteren naar een getal (C#-programmeerhandleiding)

U converteert een string getal naar een getal door de Parse of TryParse methode aan te roepen die is gevonden op numerieke typen (doubleintlong, enzovoort) of door methoden in de System.Convert klasse te gebruiken.

Het is iets efficiënter en eenvoudig om een TryParse methode aan te roepen (bijvoorbeeld int.TryParse("11", out number)) of Parse methode (bijvoorbeeld var number = int.Parse("11")). Het gebruik van een Convert methode is nuttiger voor algemene objecten die worden geïmplementeerd IConvertible.

U gebruikt Parse of TryParse methoden voor het numerieke type dat u verwacht dat de tekenreeks bevat, zoals het System.Int32 type. De Convert.ToInt32 methode gebruikt Parse intern. De Parse methode retourneert het geconverteerde getal. De TryParse methode retourneert een Booleaanse waarde die aangeeft of de conversie is geslaagd en retourneert het geconverteerde getal in een out parameter. Als de tekenreeks niet in een geldige indeling staat, genereert u een uitzondering, Parse maar TryParse retourneert falseu deze. Wanneer u een Parse methode aanroept, moet u altijd uitzonderingsafhandeling gebruiken om te FormatException zien wanneer de parseringsbewerking mislukt.

Methoden Parse of TryParse aanroepen

De Parse en TryParse methoden negeren witruimte aan het begin en aan het einde van de tekenreeks, maar alle andere tekens moeten tekens zijn die het juiste numerieke type vormen (int, longulong, , floatenzovoortdecimal). Eventuele witruimte in de tekenreeks die het getal vormt, veroorzaakt een fout. U kunt decimal.TryParse bijvoorbeeld '10', '10.3' of '10' parseren, maar u kunt deze methode niet gebruiken om 10 te parseren van '10X', '1 0' (let op de ingesloten ruimte), '10 .3' (noteer de ingesloten ruimte), '10e1' (float.TryParse werkt hier) enzovoort. Een tekenreeks waarvan de waarde is null of String.Empty die niet kan worden geparseerd. U kunt controleren op een null- of lege tekenreeks voordat u deze probeert te parseren door de String.IsNullOrEmpty methode aan te roepen.

In het volgende voorbeeld ziet u zowel geslaagde als mislukte aanroepen naar Parse en 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.
    }
}

In het volgende voorbeeld ziet u een benadering voor het parseren van een tekenreeks die naar verwachting leidende numerieke tekens bevat (inclusief hexadecimale tekens) en volgtekens die niet-numerieke tekens bevatten. Er worden geldige tekens vanaf het begin van een tekenreeks aan een nieuwe tekenreeks toegewezen voordat de TryParse methode wordt aangeroepen. Omdat de tekenreeksen die moeten worden geparseerd enkele tekens bevatten, roept het voorbeeld de String.Concat methode aan om geldige tekens toe te wijzen aan een nieuwe tekenreeks. Voor een grotere tekenreeks kan de StringBuilder klasse worden gebruikt.

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
    }
}

Methoden voor converteren aanroepen

De volgende tabel bevat een aantal methoden uit de Convert klasse die u kunt gebruiken om een tekenreeks te converteren naar een getal.

Numeriek type Wijze
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)

In het volgende voorbeeld wordt de Convert.ToInt32(String) methode aangeroepen om een invoertekenreeks te converteren naar een int. In het voorbeeld worden de twee meest voorkomende uitzonderingen van deze methode onderschept: FormatException en OverflowException. Als het resulterende getal kan worden verhoogd zonder te overschrijden Int32.MaxValue, voegt het voorbeeld 1 toe aan het resultaat en wordt de uitvoer weergegeven.

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

GitHub Copilot gebruiken om een tekenreeks te converteren naar een getal

U kunt GitHub Copilot in uw IDE gebruiken om code te genereren om een tekenreeks te converteren naar een getal in C#.

Als u Visual Studio 2022 versie 17.8 of hoger gebruikt, kunt u de AI-gestuurde GitHub Copilot in Visual Studio proberen om code te genereren om een tekenreeks te converteren naar een getal. Dien uw vraag in als prompt in het Copilot-chatvenster, zoals in het volgende voorbeeld. U kunt ook prompts verzenden via inlinechat in het editorvenster zelf.

Notitie

GitHub Copilot wordt mogelijk gemaakt door AI, dus verrassingen en fouten zijn mogelijk. Zorg ervoor dat u alle gegenereerde code of suggesties controleert. Zie de veelgestelde vragen over GitHub Copilot voor meer informatie over het algemene gebruik van GitHub Copilot, productimpact, menselijk toezicht en privacy.

In de volgende tekst ziet u een voorbeeldprompt voor Copilot Chat:

Genereer C#-code om de tekenreeks 123 te converteren naar een getal met TryParse. Geef voorbeelduitvoer op.

U kunt de prompt aanpassen om een tekenreeks te gebruiken volgens uw vereisten.

U kunt chatfuncties, zoals slash-opdrachten, verwijzingen naar bestanden, methoden of klassen en threads, gebruiken om intenties in te stellen en betere antwoorden te krijgen met contextbereik. Voor een bestaand bestand dat is geopend in de IDE, kunt u GitHub Copilot vragen met behulp van inline-chat met /generate code to convert the string string1 in #Filename to a number.

In de volgende uitvoer ziet u een voorbeeld van een Copilot Chat-antwoord:

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

Wanneer Copilot een codeblok retourneert, bevat het antwoord opties voor het kopiëren van de code, het invoegen van de code in een nieuw bestand of het bekijken van de code-uitvoer.

Notitie

Uw resultaten kunnen afwijken van wat wordt weergegeven in de voorbeeldantwoorden. AI-modellen zijn niet-deterministisch, wat betekent dat ze verschillende antwoorden kunnen retourneren wanneer ze dezelfde vraag stellen. Dit kan worden veroorzaakt door extra leer- en aanpassing in de loop van de tijd, taalvariatie, wijzigingen in context, zoals uw chatgeschiedenis en meer.

Schermopname van het gebruik van GitHub Copilot Chat in Visual Studio om een tekenreeks te converteren naar een getal.

Zie voor meer informatie: