すべての列挙値を含む、さまざまな方法で構築した 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()です。