为了检查一个类型(propertyType)是否为空,我使用:
bool isNullable = "Nullable`1".Equals(propertyType.Name)
有什么方法可以避免使用魔法弦吗?
为了检查一个类型(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中也有类似的讨论:
如何检查一个对象是否为空?