値型であるジェネリック型パラメーターがあり、値がデフォルトと等しいかどうかを知りたい場合は、次のようにテストします。
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構造体の評価に関して、ここで考慮していないことはありますか?