Нет хорошего способа проверить, является ли тип числовым, кроме сравнения его с фактическими типами.
Это особенно верно, если числовое определение немного отличается (1003 *) (в вашем случае, согласно коду, целые числа без знака не являются числовыми).
Другое дело, что DataColumn.DataType в соответствии с MSDN поддерживает только следующие типы:
- Boolean
- Байт
- Char
- DateTime
- Десятичные
- Double
- Int16
- Int32
- Int64
- SByte
- Single
- Строка
- TimeSpan
- UInt16
- UInt32
- UInt64
- Byte []
Типы , выделенные полужирным шрифтом , являются числовыми (как я их определяю), поэтому вам нужно обязательно их проверить.
Лично я бы написал метод расширения для типа DataColumn (не для ТИПА!).
Я ненавижу вещь if ... then..else , поэтому вместо этого я использую подход SETS , например:
public static bool IsNumeric(this DataColumn col) {
if (col == null)
return false;
// Make this const
var numericTypes = new [] { typeof(Byte), typeof(Decimal), typeof(Double),
typeof(Int16), typeof(Int32), typeof(Int64), typeof(SByte),
typeof(Single), typeof(UInt16), typeof(UInt32), typeof(UInt64)};
return numericTypes.Contains(col.DataType);
}
И использование будет:
if (col.IsNumeric()) ....
что достаточно легко для меня