BaseClass
我有许多类派生自一个BaseClass
只有 `Id 属性的类。
我现在需要对其中一些对象的集合进行区分。对于每个子类,我一遍又一遍地使用以下代码:
public class PositionComparer : IEqualityComparer<Position>
{
public bool Equals(Position x, Position y)
{
return (x.Id == y.Id);
}
public int GetHashCode(Position obj)
{
return obj.Id.GetHashCode();
}
}
鉴于逻辑只是基于Id
,我想创建一个比较器来减少重复:
public class BaseClassComparer : IEqualityComparer<BaseClass>
{
public bool Equals(BaseClass x, BaseClass y)
{
return (x.Id == y.Id);
}
public int GetHashCode(BaseClass obj)
{
return obj.Id.GetHashCode();
}
}
但这似乎无法编译:
IEnumerable<Position> positions = GetAllPositions();
positions = allPositions.Distinct(new BaseClassComparer())
...因为它说它不能从转换BaseClass
为Position
. 为什么比较器强制此Distinct()
调用的返回值?