我有一个类BaseClass
,其中BaseClass
只有一个Id属性。使用基类IEqualityComparer执行Distinct(),并仍然返回子类类型?
我现在需要对这些对象中的某些对象的集合进行区分。我有以下代码一遍又一遍地对每个子类:
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()
调用的返回值?
这不是已经回答了吗? – nawfal 2013-05-27 03:24:14
是的,我编译并运行了这个代码 – 2013-05-27 04:18:44