Id プロパティだけを持つクラスから派生したクラスがいくつかありBaseClass
ます。BaseClass
これらのオブジェクトのいくつかのコレクションを区別する必要があります。子クラスごとに次のコードを何度も使用しています。
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()
比較子がこの呼び出しの戻り値を強制するのはなぜですか?