69

以下はコンパイルされません。

public void MyMethod<T>(T value)
{
    if (value == default(T))
    {
        // do stuff
    }
}

エラー:Operator '==' cannot be applied to operands of type 'T' and 'T'

value == null構造体の可能性があるため使用できませんT。かもしれないので
使えません。デフォルト値と等しいかどうかをテストする適切な方法は何ですか?value.Equals(default(T))valuenull

4

2 に答える 2

102

struct/のボクシングを避けるためにNullable<T>、私は以下を使用します:

if (EqualityComparer<T>.Default.Equals(value,default(T)))
{
    // do stuff
}

これは、Tを実装し、バックアップとしてIEquatable<T>使用し、 etc(およびリフトされた演算子)を自動的に処理するものをサポートします。object.EqualsnullNullable<T>

Comparer<T>.Default比較テストを処理するものもあります。これはT、実装するハンドルでIComparable<T>あり、フォールバックして、オペレーターIComparableを処理nullし、持ち上げます。

于 2009-12-13T09:44:49.310 に答える
34

どうですか

object.Equals(value, default(T))
于 2009-12-13T06:44:39.087 に答える