Converter um caractere representando um dígito (0-9) para seu equivalente inteiro é uma tarefa frequente em C#. Este artigo explora quatro métodos eficientes, destacando seus pontos fortes e fracos para ajudá-lo a escolher a melhor abordagem para seu cenário específico.
Sumário
Subtraindo ‘0’
Este método explora a ordenação sequencial de caracteres em ASCII e Unicode. Subtrair o caractere ‘0’ de um caractere dígito resulta diretamente em seu equivalente inteiro. É conciso e altamente eficiente, mas limitado a dígitos ASCII (‘0’ a ‘9’).
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '3';
if (char.IsDigit(digitChar))
{
int intValue = digitChar - '0';
Console.WriteLine($"O valor inteiro de '{digitChar}' é: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' não é um dígito.");
}
}
}
Usando char.GetNumericValue()
O método char.GetNumericValue()
oferece conversão robusta, manipulando dígitos de várias faixas Unicode. No entanto, ele retorna um double
, exigindo um cast para int
, e retorna -1 para caracteres não numéricos.
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '7';
double numericValue = char.GetNumericValue(digitChar);
if (numericValue != -1)
{
int intValue = (int)numericValue;
Console.WriteLine($"O valor inteiro de '{digitChar}' é: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' não é um caractere numérico.");
}
}
}
Usando char.GetDecimalDigitValue()
Similar a GetNumericValue()
, mas especificamente para dígitos decimais (0-9). Retorna um int
diretamente e -1 se a entrada não for um dígito decimal, tornando-o eficiente e direto.
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '9';
int intValue = char.GetDecimalDigitValue(digitChar);
if (intValue != -1)
{
Console.WriteLine($"O valor inteiro de '{digitChar}' é: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' não é um dígito decimal.");
}
}
}
Usando int.Parse()
int.Parse()
converte uma representação de string para um inteiro. Embora aparentemente menos eficiente para caracteres únicos, é vantajoso ao manipular strings ou exigir tratamento de erros robusto. Ele lança uma FormatException
se a entrada não for um inteiro válido.
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '5';
try
{
int intValue = int.Parse(digitChar.ToString());
Console.WriteLine($"O valor inteiro de '{digitChar}' é: {intValue}");
}
catch (FormatException)
{
Console.WriteLine($"'{digitChar}' não é um inteiro válido.");
}
}
}
O método ideal depende do seu contexto. Para dígitos ASCII simples, subtrair ‘0’ é o mais rápido. Para suporte mais amplo de Unicode e tratamento de erros, GetNumericValue()
ou GetDecimalDigitValue()
são preferíveis. int.Parse()
oferece o tratamento de erros mais robusto, mas é o menos eficiente para caracteres únicos. Sempre trate erros potenciais apropriadamente.