Linq を使用して 2 つのオブジェクト リストからリストを作成する
次のシナリオを考えてみましょう。
class Person { string Name; int Value; int Change; } List<Person> list1; List<Person> list2;
目的は次のとおりです。 2 つのリストを新しい List
解決策:
Linq メソッド Union はこのタスクに最適です:
var mergedList = list1.Union(list2).ToList();
Thisこの操作により 2 つのリストがマージされ、重複が削除されます。デフォルトでは、Person クラス内で定義されている Equals メソッドと GetHashCode メソッドを呼び出します。ただし、これらのメソッドがオーバーライドされていない場合、カスタム オブジェクトを効果的に比較できない可能性があります (比較に Name プロパティを使用するなど)。
Equals と GetHashCode のオーバーライド:
名前による正確な比較を保証するには、メソッドを次のようにオーバーライドします。
public override bool Equals(object obj) { var person = obj as Person; return Equals(person); } public override int GetHashCode() { return Name.GetHashCode(); } public bool Equals(Person personToCompareTo) { if (personToCompareTo == null || string.IsNullOrEmpty(personToCompareTo.Name)) return false; return Name.Equals(personToCompareTo.Name); }
カスタム コンペアラー:
または、IEqualityComparer インターフェイスを実装するカスタム コンペアラーを作成します。この比較子は、Union メソッドの 2 番目の引数として提供できます。カスタム比較子の詳細については、http://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx.
を参照してください。以上がLINQ を使用して人物オブジェクトの 2 つのリストをマージし、名前の一致に基づいて属性の更新を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。