Чтобы проверить, является ли тип значения обнуляемым, я сейчас делаю что-то вроде этого:
int? i = null; bool isNullable = i.GetType().ToString().Contains("System.Nullable");
Есть ли более элегантный способ сделать это?
Вы можете использовать Nullable.GetUnderlyingType(Type) - это вернет null, если это не обнуляемый тип для начала, или базовый тип значения в противном случае:
Nullable.GetUnderlyingType(Type)
null
if (Nullable.GetUnderlyingType(t) != null) { // Yup, t is a nullable value type }
Обратите внимание, что здесь используется статический класс Nullable, а не структура Nullable<T>.
Nullable
Nullable<T>
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { // it is a nullable type }
Вот как Microsoft рекомендует вам Идентифицировать обнуляемые типы
int? i; bool isNullable = i is Nullable;
Редактировать : Неважно, это не работает.