gpt4 book ai didi

c# - 复杂类型的 HashSet 中的 ExceptWith

转载 作者:太空狗 更新时间:2023-10-30 00:42:26 25 4
gpt4 key购买 nike

我有自定义类的 HashSet:

public class Vertex
{
public string Name;

public override bool Equals(object obj)
{
var vert = obj as Vertex;
if (vert !=null)
{
return Name.Equals(vert.Name, StringComparison.InvariantCulture);
}
return false;
}
}

现在我有两个哈希集

HashSet<Vertex> hashSet1 = new HashSet<Vertex>();

HashSet<Vertex> hashSet1 = new HashSet<Vertex>();

现在我想在 hashSet1 中只包含不在 hashSet2 中的顶点所以我使用 ExceptWith 方法

hashSet1.ExceptWith(hashSet2);

但这行不通。我想这不起作用,因为我有复杂的类型。所以问题是:是否需要在 Vertex 类中实现一些接口(interface)才能使它工作?我知道在创建 HashSet 时我可以传递一个 EqualityComparer,但在我看来,在 Vertex 类中实现一些比较接口(interface)方法会更优雅。

有可能还是我不明白?

谢谢。

最佳答案

当覆盖 Equals 时,您还应该覆盖 GetHashCodeHashSet(以及其他哈希结构,如 Dictionary)将首先为您的对象计算哈希码,以便在将元素与 Equals 进行比较之前将它们定位到结构中.

public override int GetHashCode()
{
return StringComparer.InvariantCulture.GetHashCode(this.Name);
}

关于c# - 复杂类型的 HashSet 中的 ExceptWith,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com