1

すべての列挙値を含む、さまざまな方法で構築した 2 つのハッシュ セットがあります。

    setWithAllEnums.Equals(setToTest); // false を返す

    !(setWithAllEnums.Except(setToTest).Any()); // True を返します


これらが同等でないのはなぜですか?.NET は列挙型の GetHashCode を提供しませんか?

4

1 に答える 1

8

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()です。

于 2013-04-12T15:59:34.180 に答える