के साथ लिंक को छोड़कर मैं दो सामान्य सूचियों के बीच अंतर खोजने की कोशिश कर रहा हूं, जैसा कि नीचे दिए गए उदाहरण में है। भले ही टी 1 और टी 2 में समान गुण हों, वे एक ही वस्तु नहीं हैं, इसलिए मुझे एक IEqualityComparer को लागू करने की आवश्यकता है।कस्टम IEqualityComparer
ऐसा लगता है कि यह इस उदाहरण के साथ काम कर रहा है, लेकिन वास्तविक वर्ग में कई अन्य गुण हैं और मुझे कुछ अन्य वर्गों के साथ भी ऐसा करने की आवश्यकता है।
तो मैं सोच रहा था कि क्या मैं पहिया का पुन: आविष्कार कर रहा हूं?
क्या दो वस्तुओं के सभी गुणों की तुलना करने का कोई आसान तरीका है? फिलहाल, मुझे वास्तव में केवल सामान्य प्रकार वाले वर्ग से निपटने की आवश्यकता है, लेकिन यह अच्छा होगा कि मेरे पास एक तुलनात्मक है जो कक्षाओं के साथ काम करता है जिसमें अन्य वर्गों के उदाहरण होते हैं।
void Main()
{
var t1 = new Sizes { Name = "Test" , Size = 1} ;
var t2 = new Sizes { Name = "Test" , Size = 1} ;
var list1 = new List<Sizes>();
var list2 = new List<Sizes>();
list1.Add(t1);
list2.Add(t2);
var differences = list2.Except(list1 , new SizesComparer());
// differences should be empty.
}
public class Sizes
{
public string Name { get; set; }
public int Size { get; set; }
}
public class SizesComparer : IEqualityComparer<Sizes>
{
bool IEqualityComparer<Sizes>.Equals(Sizes x, Sizes y)
{
return (x.Name.Equals(y.Name) && x.Size.Equals(y.Size));
}
int IEqualityComparer<Sizes>.GetHashCode(Sizes obj)
{
if (Object.ReferenceEquals(obj, null))
return 0;
return obj.Name.GetHashCode() + obj.Size;
}
}
देखें IEnumerable.Except() और एक कस्टम comparer - http://stackoverflow.com/q/1299513/485076 – sll