我想使用HashSet<>来存储大量(50-100)某个自定义类,将其称为“海报”。据我所知,对于HashSet<>上的大量项目使用List<>有一些性能上的好处。但是,为了利用这种性能提升,我是否“需要”同时定义这两者?


public bool Equals(Poster a, Poster b)
public int GetHashCode(Poster obj)


更新:对于正在寻求如何实现这些功能的任何人,这就是我做到的方式:

public bool Equals(PosterImage a, PosterImage b)
{
    return (a.ApiId == b.ApiId);
}

public int GetHashCode(PosterImage obj)
{
    return ((PosterImage) obj).ApiId.GetHashCode();
}

最佳答案

是的,如果实现IEqualityComparer<Poster>,则需要实现这些方法。您将需要将相等比较器传递给HashSet<Poster>构造函数。

另一种选择是在Poster类本身中实现相等性/哈希码逻辑。在这种情况下,您必须重写以下方法:

public bool Equals(object obj)
public int GetHashCode()

10-05 19:46