Ответ 1
Нет хорошего способа проверить, является ли тип числовым, кроме сравнения его с фактическими типами.
Это особенно верно, если определение числовых бит немного отличается (в вашем случае, согласно коду, целые числа без знака не являются числами).
Другое дело, что DataColumn.DataType в соответствии с MSDN поддерживает только следующие типы:
- Boolean
- Байт
- Char
- DateTime
- Decimal
- Double
- Int16
- Int32
- Int64
- SByte
- Single
- Строка
- TimeSpan
- UInt16
- UInt32
- UInt64
- Байт []
Типы полужирный - это число (как я его определяю), поэтому вам нужно убедиться, что вы их проверяете.
Я лично напишу метод расширения для типа DataColumn (не для TYPE!).
Я ненавижу, если... тогда... все, поэтому вместо этого я использую подход на основе 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()) ....
что легко для меня