В поисках более элегантного способа проверки типов значений, допускающих обнуляемость - PullRequest
4 голосов
/ 08 июля 2010

Чтобы проверить, является ли тип значения обнуляемым, я сейчас делаю что-то вроде этого:

int? i = null;
bool isNullable = i.GetType().ToString().Contains("System.Nullable");

Есть ли более элегантный способ сделать это?

Ответы [ 3 ]

14 голосов
/ 08 июля 2010

Вы можете использовать Nullable.GetUnderlyingType(Type) - это вернет null, если это не обнуляемый тип для начала, или базовый тип значения в противном случае:

if (Nullable.GetUnderlyingType(t) != null)
{
    // Yup, t is a nullable value type
}

Обратите внимание, что здесь используется статический класс Nullable, а не структура Nullable<T>.

7 голосов
/ 08 июля 2010
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
  // it is a nullable type
}

Вот как Microsoft рекомендует вам Идентифицировать обнуляемые типы

0 голосов
/ 08 июля 2010
int? i;
bool isNullable = i is Nullable;

Редактировать : Неважно, это не работает.

...