2つのリストの違い 質問する

2つのリストの違い 質問する

CustomsObjects で満たされた 2 つの汎用リストがあります。

これら 2 つのリストの差 (最初のリストにある項目と 2 番目のリストにある項目を除く) を 3 番目のリストで取得する必要があります。

使用するのは良い考えだと思っていました.Except()が、これをどのように使用すればよいのかわかりません。助けてください!

ベストアンサー1

を使用するのExceptがまさに正しい方法です。型が と をオーバーライドする場合EqualsGetHashCodeまたは参照型の等価性のみに関心がある場合 (つまり、2 つの参照が「等しい」のは、まったく同じオブジェクトを参照する場合のみ)、次のように使用できます。

var list3 = list1.Except(list2).ToList();

たとえば ID によって、等価性のカスタム アイデアを表現する必要がある場合は、 を実装する必要がありますIEqualityComparer<T>。例:

public class IdComparer : IEqualityComparer<CustomObject>
{
    public int GetHashCode(CustomObject co)
    {
        if (co == null)
        {
            return 0;
        }
        return co.Id.GetHashCode();
    }

    public bool Equals(CustomObject x1, CustomObject x2)
    {
        if (object.ReferenceEquals(x1, x2))
        {
            return true;
        }
        if (object.ReferenceEquals(x1, null) ||
            object.ReferenceEquals(x2, null))
        {
            return false;
        }
        return x1.Id == x2.Id;
    }
}

次に以下を使用します:

var list3 = list1.Except(list2, new IdComparer()).ToList();

list2これにより重複する要素が削除されることに注意してください。重複を保持する必要がある場合は、次のようなセットを作成して使用するのが最も簡単でしょう。

var list3 = list1.Where(x => !set2.Contains(x)).ToList();

おすすめ記事