मैं लिंक के बारे में एक पुस्तक पढ़ रहा था, और देखा कि अलग विधि में अधिभार होता है जो एक तुलनाकर्ता लेता है। यह एक समस्या का एक अच्छा समाधान होगा जहां मैं एक संग्रह से अलग इकाइयों को प्राप्त करना चाहता हूं, लेकिन तुलना करना चाहते हैं कि तुलना इकाई आईडी पर हो, भले ही अन्य गुण अलग हों।मैं लिंक विशिष्ट विधि के साथ एक कस्टम तुलनाकर्ता का उपयोग कैसे करूं?
पुस्तक के अनुसार, अगर मैं एक Gribulator इकाई है, मैं इस तरह एक comparer बनाने के लिए सक्षम होना चाहिए ...
private class GribulatorComparer : IComparer<Gribulator> {
public int Compare(Gribulator g1, Gribulator g2) {
return g1.ID.CompareTo(g2.ID);
}
}
... और फिर इस तरह इसका इस्तेमाल ...
List<Gribulator> distinctGribulators
= myGribulators.Distinct(new GribulatorComparer()).ToList();
बहरहाल, यह निम्नलिखित संकलक त्रुटियों देता है ...
'System.Collections.Generic.List' 'अलग' और सबसे अच्छा विस्तार विधि अधिभार 'के लिए एक परिभाषा शामिल नहीं है System.Linq.Enumerable .Distinct (System.Collections.Generic.IEnumerable, System.Collections.Generic.IEqualityComparer) 'में कुछ ऐसी अमान्य तर्क हैं
तर्क 2: से परिवर्तित नहीं कर सकते' LinqPlayground.Program.GribulatorComparer System.Collections.Generic.IEqualityComparer 'को' '
मैं थोड़ा के आसपास खोज की है, और है कि इस तरह कोड का उपयोग उदाहरण है, लेकिन संकलक त्रुटियों के बारे में कोई शिकायत नहीं की बहुत देखा है।
मैं क्या गलत कर रहा हूं? इसके अलावा, क्या यह करने का यह सबसे अच्छा तरीका है? मैं यहां एक बंद समाधान चाहता हूं, इसलिए इकाई के लिए कोड को बदलना शुरू नहीं करना चाहते हैं। मैं इकाई को सामान्य के रूप में रखना चाहता हूं, लेकिन केवल एक ही स्थान पर, केवल आईडी द्वारा तुलना करें।
किसी भी मदद के लिए धन्यवाद।
जोड़ने के लिए भूल गए, मैं वीएस2012 का उपयोग कर रहा हूं, और इसलिए .NET 4.0 सी # –