Есть несколько способов сделать это.Если вы получаете разные типы данных из базы данных, то вы можете выполнить сравнение типов следующим образом:
Type t = x.GetType();
bool isNumeric t == typeof(sbyte) ||
t == typeof(byte) ||
t == typeof(short) ||
t == typeof(ushort) ||
t == typeof(int) ||
t == typeof(uint) ||
t == typeof(long) ||
t == typeof(ulong) ||
t == typeof(float) ||
t == typeof(double) ||
t == typeof(decimal);
Это исчерпывающее, но оно даст вам правильный ответ.
Если вы всегда получаете строку из базы данных, то вы можете использовать некоторые из встроенных функций синтаксического анализа, которые будут работать МОСТ за все время.
// DO NOT USE 'int.TryParse()' as it will FAIL for any non-integer number, i.e. "123.456"
decimal d;
bool isNumeric = decimal.TryParse(x, out d);
Десятичный имеет самый широкийдиапазон чисел в .NET (встроенных типов), так что это охватит множество случаев.Однако он все равно может потерпеть неудачу, если ваш «номер» находится за пределами его диапазона.Например, предположим, что у вас есть
string n = "5123123189461894481984885646158419999";
decimal d;
bool isNumeric = decimal.TryParse(n, out d);
Несмотря на то, что x представляет число, isNumeric вернется как false, потому что число находится за пределами диапазона десятичного типа.К счастью для вас, эти случаи чрезвычайно редки, и поэтому вам не придется прибегать к какому-либо другому, более интенсивному подходу к разбору строк, чтобы определить, является ли это число или нет.(Который я не собираюсь освещать в настоящее время.)