为了检查一个类型(propertyType)是否为空,我使用:

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

有什么方法可以避免使用魔法弦吗?


绝对-使用Nullable。GetUnderlyingType:

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

注意,这使用了非泛型静态类System。Nullable而不是泛型结构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...

使用以下代码确定Type对象是否表示Nullable类型。记住,如果Type对象是从GetType调用返回的,这段代码总是返回false。

if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}

在下面的MSDN链接中解释:

http://msdn.microsoft.com/en-us/library/ms366789.aspx

此外,在这次SO QA中也有类似的讨论:

如何检查一个对象是否为空?