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
, , long
double
, 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
, decimal
e 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.
Para obter mais informações, consulte: