c# - 在 C# 的 IEqualityComparer 中使用泛型
问题描述
我有一个这样定义的 C# 类:
public class Group<T> : ICloneable where T : CustomGroup
{
...
}
当我最初实现这个时,它没有泛型。然而,由于一些新的要求,我不得不在这个类上使用泛型。现在,这门课有一个IEqualityComparer
. 它在它的预泛型实现中起作用。但是,现在,我不确定如何定义类和方法签名。
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();
}
}
这不再编译为“使用泛型类型 Group 需要 1 个类型参数”。但是,我不确定如何更新类和方法签名以支持Group<T>
T 必须是CustomGroup
.
有没有办法做到这一点?如果是这样,怎么做?
解决方案
使您的比较器类也通用:
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();
}
}