すべての列挙値を含む、さまざまな方法で構築した 2 つのハッシュ セットがあります。
setWithAllEnums.Equals(setToTest); // false を返す !(setWithAllEnums.Except(setToTest).Any()); // True を返します
これらが同等でないのはなぜですか?.NET は列挙型の GetHashCode を提供しませんか?
HashSet<T>
オーバーライドしませんEquals
。2 つのハッシュ セットにまったく同じ値が含まれていても、それらが異なるオブジェクトを参照している場合、それらは等しくありません。ご希望の方法はSetEquals
.
ただし、Tim Schmelter は優れた点を指摘しています。x.SetEquals(y)
も同じものではあり!x.Except(y).Any()
ません。セット x ={1, 2}
と y ={1, 2, 3}
は等しくありませんが、!x.Except(y).Any()
真です。 x.SetEquals(y)
と同等!x.Except(y).Any() && !y.Except(x).Any()
です。