if (Nullable.GetUnderlyingType(propertyType) != null)
{
// It nullable
}
Обратите внимание, что это использует не общий родовой статический класс System.Nullable, а не общую конструкцию Nullable<T>.
Также обратите внимание, что это проверит, представляет ли он конкретный (закрытый) тип значения NULL... он не будет работать, если вы используете его для общего типа, например.
public class Foo<T> where T : struct
{
public Nullable<T> Bar { get; set; }
}
Type propertyType = typeof(Foo<>).GetProperty("Bar").PropertyType;
// propertyType is an *open* type...
Ответ 2
Используйте следующий код, чтобы определить, представляет ли объект Type объект Nullable. Помните, что этот код всегда возвращает false, если объект Type был возвращен из вызова GetType.
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}