以下はコンパイルされません:
_public void MyMethod<T>(T value)
{
if (value == default(T))
{
// do stuff
}
}
_
エラー:_Operator '==' cannot be applied to operands of type 'T' and 'T'
_
T
は構造体の可能性があるため、_value == null
_は使用できません。value
がnull
である可能性があるため、value.Equals(default(T))
を使用できません。
デフォルト値と等しいかどうかをテストする適切な方法は何ですか?
struct
/Nullable<T>
のボクシングを回避するには、次のようにします。
if (EqualityComparer<T>.Default.Equals(value,default(T)))
{
// do stuff
}
これは、バックアップとしてIEquatable<T>
を使用し、object.Equals
を実装するすべてのT
をサポートし、null
など(およびNullable<T>
のリフト演算子)を自動的に処理します。
比較テストを処理するComparer<T>.Default
もあります。これはIComparable<T>
を実装するT
を処理し、IComparable
にフォールバックします-null
およびリフトされた演算子を再び処理します。
どうですか
object.Equals(value, default(T))