小编典典

检查类型是否为 Nullable 的正确方法

all

为了检查Type( propertyType) 是否可以为空,我使用:

bool isNullable =  "Nullable`1".Equals(propertyType.Name)

有什么方法可以避免使用魔术字符串吗?


阅读 95

收藏
2022-06-09

共1个答案

小编典典

绝对 - 使用Nullable.GetUnderlyingType

if (Nullable.GetUnderlyingType(propertyType) != null)
{
    // It's nullable
}

请注意,这使用非泛型静态类System.Nullable而不是泛型 struct Nullable<T>

另请注意,这将检查它是否代表 特定(封闭)可为空的值类型......如果您在 泛型 类型上使用它,它将不起作用,例如

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...
2022-06-09