我有一個類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