Я знаю, что это старая ветка, но ни один из ответов на самом деле не сделал это для меня - ни неэффективно, либо не заключено в капсулу для легкого повторного использования. Я также хотел убедиться, что он вернул false, если строка была пустой или нулевой. TryParse возвращает true в этом случае (пустая строка не вызывает ошибку при разборе как числа). Итак, вот мой метод расширения строки:
public static class Extensions
{
/// <summary>
/// Returns true if string is numeric and not empty or null or whitespace.
/// Determines if string is numeric by parsing as Double
/// </summary>
/// <param name="str"></param>
/// <param name="style">Optional style - defaults to NumberStyles.Number (leading and trailing whitespace, leading and trailing sign, decimal point and thousands separator) </param>
/// <param name="culture">Optional CultureInfo - defaults to InvariantCulture</param>
/// <returns></returns>
public static bool IsNumeric(this string str, NumberStyles style = NumberStyles.Number,
CultureInfo culture = null)
{
double num;
if (culture == null) culture = CultureInfo.InvariantCulture;
return Double.TryParse(str, style, culture, out num) && !String.IsNullOrWhiteSpace(str);
}
}
Простой в использовании:
var mystring = "1234.56789";
var test = mystring.IsNumeric();
Или, если вы хотите проверить другие типы чисел, вы можете указать «стиль».
Итак, чтобы преобразовать число с экспонентой, вы можете использовать:
var mystring = "5.2453232E6";
var test = mystring.IsNumeric(style: NumberStyles.AllowExponent);
Или для проверки потенциальной шестнадцатеричной строки вы можете использовать:
var mystring = "0xF67AB2";
var test = mystring.IsNumeric(style: NumberStyles.HexNumber)
Необязательный параметр 'culture' может использоваться почти таким же образом.
Он ограничен тем, что не может преобразовать строки, которые слишком велики для двойного, но это ограниченное требование, и я думаю, что если вы работаете с числами, большими, чем это, вам, вероятно, понадобятся в любом случае специализированные функции обработки номеров.