Я пытаюсь написать метод расширения, который при заданном значении вернет
- Само значение, если оно отличается от
DBNull.Value
- Значение по умолчанию для типа
value
Да, это не самое ясное объяснение, может быть, какой-то код сделает то, что я пытаюсь сделать, очевидным.
public static T GetValueOrDefault<T>(this object value) {
if (value == DBNull.Value)
return default(T);
else
return (T)value;
}
Пока коробочный тип value
совпадает с T
, этот метод работает правильно.
Настоящее веселье проявляется, когда типы различаются, например, в штучной упаковке значение byte
и T
равно int
.
Есть ли элегантный способ сделать эту работу?
Выполнение некоторой проверки типов вручную для первого приведения, например, object
до byte
, а затем от byte
до T
, конечно, не будет работать.
Редактировать
Предлагаемое решение должно работать и с перечислениями, а не только со "стандартными" типами.