Partilhar via


Como converter uma cadeia de caracteres em um número (Guia de Programação em C#)

Você converte um string em um número chamando o Parse método ou TryParse encontrado em tipos numéricos (int, , longdouble, e assim por diante) ou usando métodos na System.Convert classe.

É um pouco mais eficiente e simples chamar um TryParse método (por exemplo, int.TryParse("11", out number)) ou Parse método (por exemplo, var number = int.Parse("11")). Usar um Convert método é mais útil para objetos gerais que implementam IConvertibleo .

Você usa Parse ou TryParse métodos no tipo numérico que você espera que a cadeia de caracteres contém, como o System.Int32 tipo. O Convert.ToInt32 método usa Parse internamente. O Parse método retorna o número convertido, o TryParse método retorna um valor booleano que indica se a conversão foi bem-sucedida e retorna o número convertido em um out parâmetro. Se a cadeia de caracteres não estiver em um formato válido, Parse lançará uma exceção, mas TryParse retornará false. Ao chamar um Parse método, você sempre deve usar o tratamento de exceção para capturar um FormatException quando a operação de análise falhar.

Métodos Call Parse ou TryParse

Os Parse métodos e TryParse ignoram o espaço em branco no início e no final da cadeia de caracteres, mas todos os outros caracteres devem ser caracteres que formam o tipo numérico apropriado (int, long, ulong, float, decimale assim por diante). Qualquer espaço em branco dentro da cadeia de caracteres que forma o número causa um erro. Por exemplo, você pode usar decimal.TryParse para analisar "10", "10.3" ou " 10 ", mas não pode usar esse método para analisar 10 de "10X", "1 0" (observe o espaço incorporado), "10 .3" (observe o espaço incorporado), "10e1" (float.TryParse funciona aqui) e assim por diante. Uma cadeia de caracteres cujo valor é null ou String.Empty não é analisado com êxito. Você pode verificar se há uma cadeia de caracteres nula ou vazia antes de tentar analisá-la chamando o String.IsNullOrEmpty método.

O exemplo a seguir demonstra chamadas bem-sucedidas e malsucedidas para Parse e 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.
    }
}

O exemplo a seguir ilustra uma abordagem para analisar uma cadeia de caracteres que deve incluir caracteres numéricos à esquerda (incluindo caracteres hexadecimais) e caracteres não numéricos à direita. Ele atribui caracteres válidos do início de uma cadeia de caracteres a uma nova cadeia de caracteres antes de chamar o TryParse método. Como as cadeias de caracteres a serem analisadas contêm alguns caracteres, o exemplo chama o String.Concat método para atribuir caracteres válidos a uma nova cadeia de caracteres. Para uma cadeia de caracteres maior, a StringBuilder classe pode ser usada em vez disso.

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

Métodos Call Convert

A tabela a seguir lista alguns dos métodos da classe que você pode usar para converter uma cadeia de Convert caracteres em um número.

Tipo numérico Método
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)

O exemplo a seguir chama o Convert.ToInt32(String) método para converter uma cadeia de caracteres de entrada em int. O exemplo captura as duas exceções mais comuns lançadas por esse método: FormatException e OverflowException. Se o número resultante puder ser incrementado sem exceder Int32.MaxValue, o exemplo adiciona 1 ao resultado e exibe a saída.

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

Use o GitHub Copilot para converter uma cadeia de caracteres em um número

Você pode usar o GitHub Copilot em seu IDE para gerar código para converter uma cadeia de caracteres em um número em C#.

Se você estiver usando o Visual Studio 2022 versão 17.8 ou posterior, poderá tentar o Copilot GitHub orientado por IA no Visual Studio para gerar código para converter uma cadeia de caracteres em um número. Envie sua pergunta como um prompt na janela de bate-papo do Copilot, como no exemplo a seguir. Você também pode enviar prompts usando o bate-papo embutido na própria janela do editor.

Nota

O GitHub Copilot é alimentado por IA, então surpresas e erros são possíveis. Certifique-se de verificar qualquer código gerado ou sugestões. Para obter mais informações sobre o uso geral do GitHub Copilot, impacto no produto, supervisão humana e privacidade, consulte Perguntas frequentes sobre o GitHub Copilot.

O texto a seguir mostra um exemplo de prompt para o Copilot Chat:

Gere código C# para converter a string "123" em um número usando TryParse. Forneça um exemplo de saída.

Você pode personalizar o prompt para usar uma cadeia de caracteres de acordo com suas necessidades.

Você pode usar recursos de bate-papo, como comandos de barra, referências a arquivos, métodos ou classes e threads, para definir a intenção e obter melhores respostas com contexto de escopo. Para um arquivo existente aberto no IDE, você pode solicitar o GitHub Copilot usando o bate-papo em linha com /generate code to convert the string string1 in #Filename to a number.

A saída a seguir mostra um exemplo de resposta do Copilot Chat:

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

Quando o Copilot retorna um bloco de código, a resposta inclui opções para copiar o código, inserir o código em um novo arquivo ou visualizar a saída do código.

Nota

Seus resultados podem ser diferentes do que é mostrado nas respostas de exemplo. Os modelos de IA não são determinísticos, o que significa que podem retornar respostas diferentes quando feitas a mesma pergunta. Isso pode ser devido a aprendizado e adaptação adicionais ao longo do tempo, variação de idioma, mudanças no contexto, como seu histórico de bate-papo, e muito mais.

Captura de tela que mostra o uso do GitHub Copilot Chat no Visual Studio para converter uma cadeia de caracteres em um número.

Para obter mais informações, consulte: