web-dev-qa-db-ja.com

null許容型を比較す​​る方法は?

2つの(null可能)値を比較して、それらが同じかどうかを確認する必要がある場所がいくつかあります。

フレームワークにはこれをサポートする何かがあるはずですが、何も見つからないので、代わりに次のようにします。

_public static bool IsDifferentTo(this bool? x, bool? y)
{
    return (x.HasValue != y.HasValue) ? true : x.HasValue && x.Value != y.Value;
}
_

次に、コード内にif (x.IsDifferentTo(y)) ...があります

次に、nullable int、nullable doubleなどの同様のメソッドがあります.

2つのnull許容型が同じかどうかを確認する簡単な方法はありませんか?

更新:

このメソッドが存在する理由は、コードがVB.Netから変換されたためであり、Nothing = Nothingはfalseを返します(null == nullがtrueを返すC#と比較してください)。 VB.Netコードでは、代わりに_.Equals..._を使用する必要がありました。

55
David_001

C#は「リフト」演算子をサポートしているため、型(bool?この場合)は、コンパイル時に既知であり、使用できるはずです。

return x != y;

ジェネリックが必要な場合は、EqualityComparer<T>.Default あなたの友だちです:

return !EqualityComparer<T>.Default.Equals(x,y);

ただし、これらのアプローチは両方とも「null == null "アプローチ(ANSI SQLとは対照的)。" null != null "その後、個別にテストする必要があります。

return x == null || x != y;
69
Marc Gravell
36
Anton Gogolev
if (x.Equals(y)) 
22
Kashif

System.Objectでstatic Equals メソッドを使用できます。

var equal = object.Equals(objA, objB);
6
Mark Seemann

_==_、または.Equals()を使用するだけです。

5
Lucero
3
Randy Minder