私のアプリケーションには、Name
プロパティ(Distinct()
など)を使用するいくつかのクラスがあります。私は常にName
を比較しようとしているので、他のすべてのクラスが実装しているName
のプロパティを持つインタフェースISomeComparedStuff
を抽出することにしました。私はそのような比較のクラスを設定します。Linq単一の比較クラス(とインターフェイス)で区別
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);
私はキャストエラー(ISomeComparedStuff
からSomeStuff
)を取得しています。これを行うにはいくつかの方法がありますが、1つのクラスを比較する必要があります。それ以外の場合は、クラスを1つずつ作成する必要があります(ただし、常にName
を比較します)。
注:この「タイトル」にはヘルプが必要です。どんな提案も素晴らしいだろう。
私はこのアプローチを好む:
ビットを展開するには、あなたもこのような新しい拡張メソッドを作ることができる:
欠点は、あなたがアップし、新たなに適切なバージョンを持っています(特にDistinctByName()などの別の拡張メソッドでカプセル化されている場合)、元の型に戻す必要があります。そうでなければ、結果のIEnumerableはおそらくかなり役に立たないでしょう。 –
はい。私は、キャスト後にすべてのデータを失うことに懸念します。 –
データを失うことはありません。インターフェースへのキャストはロッシーではありません。 –