HashSet内部的自定义类<>;

本文关键字:lt gt 内部 自定义 HashSet | 更新日期: 2023-09-27 18:29:08

我想使用HashSet<>来存储某个自定义类的大量(50-100),我们称之为"Poster"。据我所知,与List<>相比,使用HashSet<>来存储大量项目会带来一些性能优势。但是,为了利用这种性能优势,我是否"需要"同时定义这两种情况?

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

HashSet内部的自定义类<>;

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

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

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