HashSet中的自定义类<>

时间:2014-11-03 17:44:21

标签: c# hashset

我想使用HashSet<>来存储大量(50-100)某个自定义类,我们可以将其称为&#34; Poster。&#34;据我所知,使用HashSet<>List<>以上的大量项目有一些性能优势。但是为了利用这种性能提升,我需要&#34;需要&#34;定义这两个?

  • 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();
}

1 个答案:

答案 0 :(得分:4)

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

另一个选择是在Poster类本身中实现相等/哈希码逻辑;在这种情况下,您必须覆盖这些方法:

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