在这种情况下,一个成员被编辑为与另一个成员相等,强制HashSet重新计算哈希值从而清除自身重复的正确方法是什么?
我知道最好不要期望这会自动发生,所以我尝试了将HashSet与自身相交的事情,然后将其重新分配给引用自身和相同EqualityComparer的构造函数调用.我确信后者会奏效,但不会.
成功的一件事是将HashSet从其转换为其他容器类型(如List)而不是直接从其自身转换.
班级定义:
public class Test {
public int N;
public override string ToString() { return this.N.ToString(); }
}
public class TestClassEquality: IEqualityComparer<Test> {
public bool Equals(Test x, Test y) { return x.N == y.N; }
public int GetHashCode(Test obj) { return obj.N.GetHashCode(); }
}
Run Code Online (Sandbox Code Playgroud)
测试代码:
TestClassEquality eq = new TestClassEquality();
HashSet<Test> hs = new HashSet<Test>(eq);
Test a = new Test { N = 1 }, b = new Test { N = 2 };
hs.Add(a);
hs.Add(b);
b.N = …Run Code Online (Sandbox Code Playgroud)