Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Você converte um string
em um número chamando o método Parse
ou TryParse
encontrado em tipos numéricos (int
, long
, double
, e assim por diante) ou usando métodos na classe System.Convert.
É 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 IConvertible implementam.
Você usa métodos Parse
ou TryParse
no tipo numérico que espera que a cadeia de caracteres contenha, como o tipo System.Int32. 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, deve-se sempre usar o tratamento de exceções para capturar um FormatException quando a operação de análise falhar.
Sugestão
Você pode usar a assistência de IA para converter uma cadeia de caracteres em um número.
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
}
}
Chamar os métodos 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 {++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
Usar IA para converter uma cadeia de caracteres em um número
Você pode usar ferramentas de IA, como o GitHub Copilot, para gerar código C# para converter uma cadeia de caracteres em um número. Você pode personalizar o prompt para usar uma cadeia de caracteres de acordo com suas necessidades.
O texto a seguir mostra um exemplo de prompt para o Copilot Chat:
Show me how to parse a string as a number, but don't throw an exception if the input string doesn't represent a number.
O GitHub Copilot é alimentado por IA, então surpresas e erros são possíveis. Para obter mais informações, consulte Copilot FAQs.