如果我有一个泛型类型参数是值类型,并且我想知道一个值是否等于默认值,我会像这样测试它:
如果我没有一个泛型类型参数,那么似乎我必须使用反射。如果这个方法必须适用于所有的值类型, 那么有没有比我这里做的更好的测试方式呢?
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);
}
顺带一提,我在评估可空结构时是否有遗漏的地方?
value is ValueType
的测试也会检查null
。 :) - cdhowieif (!(value is ValueType)) return value == null;
- cdhowie