为了检查Type( propertyType) 是否可以为空,我使用:
Type
propertyType
bool isNullable = "Nullable`1".Equals(propertyType.Name)
有什么方法可以避免使用魔术字符串吗?
绝对 - 使用Nullable.GetUnderlyingType:
Nullable.GetUnderlyingType
if (Nullable.GetUnderlyingType(propertyType) != null) { // It's nullable }
请注意,这使用非泛型静态类System.Nullable而不是泛型 struct Nullable<T>。
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...