Преобразование символа, представляющего цифру (0-9), в его целочисленный эквивалент — частая задача в C#. В этой статье рассматриваются четыре эффективных метода, выделяются их сильные и слабые стороны, чтобы помочь вам выбрать наилучший подход для вашей конкретной ситуации.
Содержание
- Вычитание ‘0’
- Использование
char.GetNumericValue()
- Использование
char.GetDecimalDigitValue()
- Использование
int.Parse()
Вычитание ‘0’
Этот метод использует последовательную упорядоченность символов в ASCII и Unicode. Вычитание символа ‘0’ из символа цифры непосредственно дает его целочисленный эквивалент. Он краток и очень эффективен, но ограничен цифрами ASCII (‘0’ — ‘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($"Целочисленное значение '{digitChar}' равно: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' не является цифрой.");
}
}
}
Использование char.GetNumericValue()
Метод char.GetNumericValue()
обеспечивает надежное преобразование, обрабатывая цифры из различных диапазонов Unicode. Однако он возвращает double
, требующий приведения к типу int
, и возвращает -1 для нечисловых символов.
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($"Целочисленное значение '{digitChar}' равно: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' не является числовым символом.");
}
}
}
Использование char.GetDecimalDigitValue()
Аналогично GetNumericValue()
, но специально для десятичных цифр (0-9). Он возвращает int
напрямую и -1, если входные данные не являются десятичной цифрой, что делает его эффективным и простым.
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '9';
int intValue = char.GetDecimalDigitValue(digitChar);
if (intValue != -1)
{
Console.WriteLine($"Целочисленное значение '{digitChar}' равно: {intValue}");
}
else
{
Console.WriteLine($"'{digitChar}' не является десятичной цифрой.");
}
}
}
Использование int.Parse()
int.Parse()
преобразует строковое представление в целое число. Хотя на первый взгляд он менее эффективен для отдельных символов, он выгоден при обработке строк или необходимости надежной обработки ошибок. Он вызывает исключение FormatException
, если входные данные не являются допустимым целым числом.
using System;
public class CharToIntConversion
{
public static void Main(string[] args)
{
char digitChar = '5';
try
{
int intValue = int.Parse(digitChar.ToString());
Console.WriteLine($"Целочисленное значение '{digitChar}' равно: {intValue}");
}
catch (FormatException)
{
Console.WriteLine($"'{digitChar}' не является допустимым целым числом.");
}
}
}
Оптимальный метод зависит от вашего контекста. Для простых цифр ASCII вычитание ‘0’ является самым быстрым. Для более широкой поддержки Unicode и обработки ошибок предпочтительнее GetNumericValue()
или GetDecimalDigitValue()
. int.Parse()
обеспечивает самую надежную обработку ошибок, но наименее эффективен для отдельных символов. Всегда обрабатывайте потенциальные ошибки соответствующим образом.