アプリケーションにいくつかのクラスがあり、そのすべてに、Name
比較の基礎として使用したいプロパティ (Distinct()
など) があります。私は常に を比較するつもりなので、他のすべてのクラスが実装するプロパティを単に持っているName
インターフェース を抽出することにしました。比較クラスを次のように設定しました。ISomeComparedStuff
Name
public class MyComparer : IEqualityComparer<ISomeComparedStuff>
{
public bool Equals(ISomeComparedStuff x, ISomeComparedStuff y)
{
return x.Name == y.Name;
}
public int GetHashCode(ISomeComparedStuff obj)
{
return obj.Name.GetHashCode();
}
}
唯一の問題は、それに対してコーディングしようとするときです。
public class SomeStuff : ISomeComparedStuff
{
...
}
public class SomeMoreStuff : ISomeComparedStuff
{
...
}
var someStuff = GetSomeStuff().Distinct(new MyComparer);
var someMoreStuff = GetSomeMoreStuff().Distinct(new MyComparer);
キャスト エラー ( SomeStuff
to ISomeComparedStuff
) が発生します。これを行う方法はあるので、必要な比較クラスは 1 つだけName
です。
注: この質問「タイトル」に助けが必要であることは理解しています。どんな提案も素晴らしいでしょう。