В течение нескольких лет я использовал следующий небольшой фрагмент кода в качестве чистой функции C # IsNumeric
.
Конечно, это не совсем то же самое, что и функция IsNumeric
библиотеки Microsoft.VisualBasic
, поскольку эта функция (если вы посмотрите на декомпилированный код) включает в себя множество проверок типов и использование интерфейса IConvertible
Однако эта маленькая функция хорошо сработала для меня.
Также обратите внимание, что эта функция использует double.TryParse
вместо int.TryParse
, чтобы разрешить анализ как целых чисел (включая long
), так и чисел с плавающей запятой. Также обратите внимание, что эта функция специально устанавливает InvariantCulture
при разборе (например) чисел с плавающей запятой, поэтому правильно идентифицирует как 123.00
, так и 123,00
(обратите внимание на разделители запятой и десятичной запятой) как числа с плавающей запятой.
using System;
using System.Globalization;
namespace MyNumberFunctions
{
public static class NumberFunctions
{
public static bool IsNumeric(this object expression)
{
if (expression == null)
{
return false;
}
double number;
return Double.TryParse(Convert.ToString(expression, CultureInfo.InvariantCulture), NumberStyles.Any, NumberFormatInfo.InvariantInfo, out number);
}
}
}
Использование невероятно просто, поскольку оно реализовано как метод расширения:
string myNumberToParse = "123.00";
bool isThisNumeric = myNumberToParse.IsNumeric();