如果我有一个值类型的泛型类型参数并且我想知道一个值是否等于默认值,我会像这样测试它:
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 结构,我在这里没有考虑什么?