問題を比較するときは、オブジェクトを比較するときにEquals
とGethashcode
を使用します。これらの2つの方法をオーバーライドして、ニーズに合わせて独自の実装を提供することができます。以下の2つの方法をオーバーライドする方法については、下記の回答があります。
通常、エンティティ/それらを呼びたいと思っています)非常にシンプルで、比較実装の詳細を私のモデルから遠ざけています。その場合、あなたはIEqualityComparer<TSource>
を実装し、ここだけName
プロパティに基づいてIEqualityComprarer
の実装例だIEqualityComparer
にかかるIntersects
のオーバーロードを使用することができます...基本的に
public class ClientNameEqualityComparer : IEqualityComparer<Clients>
{
public bool Equals(Clients c1, Clients c2)
{
if (c2 == null && c1 == null)
return true;
else if (c1 == null | c2 == null)
return false;
else if(c1.Name == c2.Name)
return true;
else
return false;
}
public int GetHashCode(Client c)
{
return c.Name.GetHashCode();
}
}
、実装上記の場合はの2つのインスタンスがName
プロパティの同じ値を持つ場合、それらは等しいとみなされます。あなたがfollowigを行うことができます今すぐ
...
A.Intersect(B, new ClientNameEqualityComparer()).ToList();
そして、それはあなたが期待している結果を生成します...
出典
2017-12-08 09:00:04
Leo
あなたはそのクラスのプロパティではなく、クラスを比較しました。 'Client'クラスで' Equal'と 'GetHashCode'をオーバーライドする必要があります。ここに例がありますhttps://stackoverflow.com/a/38434457/2946329 –
両方のリストにある「Jonathan」のインスタンスは同じですか?彼らは同じではないように聞こえるのでもちろんリストは空です。クラスのリストを比較するには、独自のcomparerを実装します。 – Equalsk