在C#中的IEqualityComparer中使用泛型

问题描述 投票:-2回答:1

我有一个像这样定义的C#类:

public class Group<T> : ICloneable where T : CustomGroup
{
  ...
}

当我最初实现这个时,它没有泛型。但是,由于一些新的要求,我不得不在这个类中使用泛型。现在,这堂课有一个IEqualityComparer。它在它的pre-generics实现中起作用。但是,现在,我不确定如何定义类和方法签名。

public class GroupComparer : IEqualityComparer<Group>
{
  public bool Equals(Group a, Group b)
  {
    return (a.Id == b.Id);
  }

  public int GetHashCode(Group obj)
  {
    return obj.GetHashCode();
  }
}

这不再编译说“使用泛型类型组需要1个类型参数”。但是,我不知道如何更新类和方法签名以支持Group<T>,其中T必须是CustomGroup

有没有办法做到这一点?如果是这样,怎么样?

c# generics
1个回答
2
投票

使比较器类也通用:

public class GroupComparer<T> : IEqualityComparer<Group<T>> where T : CustomGroup
{
  public bool Equals(Group<T> a, Group b<T>)
  {
    return (a.Id == b.Id);
  }

  public int GetHashCode(Group<T> obj)
  {
    return obj.GetHashCode();
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.