मुझे ज़ोर देना ज़रूरी लगता है - सिवाय सिवाय विधि के उपयोग के आप उन वस्तुओं को वापस कर देंगे जो पहली बार में वस्तुओं के बिना दूसरे एक में हैं। यह उन तत्वों को दूसरे में वापस नहीं करता है जो पहले दिखाई नहीं देते हैं।
var list1 = new List<int> { 1, 2, 3, 4, 5};
var list2 = new List<int> { 3, 4, 5, 6, 7 };
var list3 = list1.Except(list2).ToList(); //list3 contains only 1, 2
लेकिन अगर आप दो सूचियों के बीच वास्तविक अंतर चाहते हैं:
आइटम जो पहले एक में आइटम के बिना दूसरे में हैं और आइटम जो दूसरे में आइटम के बिना दूसरे में हैं।
आपको दो बार छोड़कर उपयोग करने की आवश्यकता है:
var list1 = new List<int> { 1, 2, 3, 4, 5};
var list2 = new List<int> { 3, 4, 5, 6, 7 };
var list3 = list1.Except(list2); //list3 contains only 1, 2
var list4 = list2.Except(list1); //list4 contains only 6, 7
var resultList = list3.Concat(list4).ToList(); //resultList contains 1, 2, 6, 7
या आप HashSet की SymmetricExceptWith विधि का उपयोग कर सकते हैं । लेकिन यह सेट को बदल देता है जिस पर कहा जाता है:
var list1 = new List<int> { 1, 2, 3, 4, 5};
var list2 = new List<int> { 3, 4, 5, 6, 7 };
var list1Set = list1.ToHashSet(); //.net framework 4.7.2 and .net core 2.0 and above otherwise new HashSet(list1)
list1Set.SymmetricExceptWith(list2);
var resultList = list1Set.ToList(); //resultList contains 1, 2, 6, 7
Exceptएक है सेट आपरेशन, फिर परिणामी सूची अलग-अलग मान, जैसे होगा{'A','A','B','C'}.Except({'B','C'})रिटर्न{'A'}