正确的方法来检查types是否为空

为了检查TypepropertyType )是否为空,我使用:

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

有没有办法避免使用魔术string?

绝对 – 使用Nullable.GetUnderlyingType

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

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

另外请注意,这将检查它是否代表一个特定的 (封闭的)可为空的值types…如果您在generics上使用它,它将不起作用,例如

 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对象是否表示一个Nullabletypes。 请记住,如果Type对象是从调用GetType返回的,则此代码始终返回false。

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

在下面的MSDN链接解释:

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

而且,这个SO QA也有类似的讨论:

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