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

本文关键字:方法 null 类型 是否 检查 | 更新日期: 2023-09-27 18:20:48

为了检查TypepropertyType)是否可以为null,我使用:

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

有没有什么方法可以避免使用魔术串?

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

绝对-使用Nullable.GetUnderlyingType:

if (Nullable.GetUnderlyingType(propertyType) != null)
{
    // It's 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...

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

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

在下面的MSDN链接中解释:

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

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

如何检查对象是否可以为null?