【发布时间】:2011-10-27 10:30:27
【问题描述】:
如果我有一个值类型的泛型类型参数,并且我想知道一个值是否等于默认值,我会像这样测试它:
static bool IsDefault<T>(T value){
where T: struct
return value.Equals(default(T));
}
如果我没有泛型类型参数,那么似乎我必须使用反射。如果该方法必须适用于所有值类型,那么 有没有比我在这里做的更好的方法来执行这个测试? :
static bool IsDefault(object value){
if(!(value is ValueType)){
throw new ArgumentException("Precondition failed: Must be a ValueType", "value");
}
var @default = Activator.CreateInstance(value.GetType());
return value.Equals(@default);
}
在旁注中,关于评估 Nullable 结构,有什么我没有考虑的吗?
【问题讨论】:
-
我觉得没问题。好在
value is ValueType测试也会检查null。 :) -
两个问题:1.为什么不用泛型方法? 2. 为什么不把第二个方法的参数设为
ValueType,反正你就是要抱怨呢? -
或者
if (!(value is ValueType)) return value == null;
标签: c# reflection struct default default-constructor