Mencipta Senarai Gabungan dengan Nilai Berubah Menggunakan LINQ
Dalam senario yang dibentangkan, anda mempunyai dua senarai objek Orang dan memerlukan senarai baharu yang menggabungkan senarai ini. Untuk objek Orang yang serupa, entri yang digabungkan harus mengekalkan nama kongsinya, memiliki nilai dari list2 dan perubahannya harus dikira sebagai (list2.Value - list1.Value). Jika tiada pertindihan wujud, perubahan harus kekal pada sifar.
Untuk mencapai ini, gunakan kaedah sambungan LINQ Union. Contohnya:
var mergedList = list1.Union(list2).ToList();
Tindakan ini menggabungkan dua senarai, menghapuskan pendua. Secara lalai, kaedah Equals dan GetHashCode yang ditakrifkan dalam kelas Person anda digunakan untuk menentukan kesamaan objek. Untuk perbandingan tersuai berdasarkan sifat seperti Name, ganti kaedah ini seperti berikut:
public override bool Equals(object obj) { // Check if obj is convertible to Person var person = obj as Person; return Equals(person); } public override int GetHashCode() { return Name.GetHashCode(); } public bool Equals(Person personToCompareTo) { // Check for null or empty Name if (personToCompareTo == null || string.IsNullOrEmpty(personToCompareTo.Name)) return false; // Compare Names for equality return Name.Equals(personToCompareTo.Name); }
Sebagai alternatif, tentukan kelas pembanding yang melaksanakan antara muka IEqualityComparer dan berikannya sebagai argumen kedua kepada kaedah Union untuk perbandingan objek tersuai . Untuk butiran lanjut, rujuk https://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Dua Senarai Objek Orang dalam C# Menggunakan LINQ, Mengendalikan Pendua dan Mengira Perbezaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!