मेरे पास अपने स्वयं के संदर्भ-प्रकार ऑब्जेक्ट्स के दो संग्रह हैं जिन्हें मैंने अपना स्वयं का IEquatable लिखा है। इसके लिए विधि, और मैं उन पर LINQ विधियों का उपयोग करने में सक्षम होना चाहता हूं।क्यों नहीं है (LINQ) चीजों की तुलना ठीक से करता है? (IEquatable का उपयोग करके)
तो,
List<CandyType> candy = dataSource.GetListOfCandy();
List<CandyType> lollyPops = dataSource.GetListOfLollyPops();
var candyOtherThanLollyPops = candy.Except(lollyPops);
.Except के प्रलेखन, एक IEqualityComparer गुजर नहीं EqualityComparer.Default में परिणाम चाहिए के अनुसार वस्तुओं की तुलना करने के लिए इस्तेमाल किया जा रहा। और डिफ़ॉल्ट comparer के लिए प्रलेखन यह है:।
"डिफ़ॉल्ट संपत्ति चेकों प्रकार टी System.IEquatable सामान्य इंटरफ़ेस लागू करता है और चाहे तो एक EqualityComparer का उपयोग करता है कि कार्यान्वयन अन्यथा यह एक EqualityComparer की ओवरराइड का उपयोग करता है रिटर्न वापस लौट आता है ऑब्जेक्ट। एक्वाल्स एंड ऑब्जेक्ट। गेटहाशकोड टी द्वारा प्रदान किया गया "
तो, क्योंकि मैं अपने वस्तु के लिए IEquatable लागू है, यह है कि और काम का उपयोग करना चाहिए। लेकिन, यह नहीं है। यह तब तक काम नहीं करता जब तक कि मैं GetHashCode को ओवरराइड नहीं करता। असल में, अगर मैं ब्रेक पॉइंट सेट करता हूं, तो मेरी आईक्वाटेबल। एक्वाल्स विधि कभी निष्पादित नहीं होती है। इससे मुझे लगता है कि यह योजना दस्तावेज के अनुसार योजना बी के साथ जा रहा है। मैं समझता हूँ कि अधिभावी GetHashCode वैसे भी एक अच्छा विचार है,, और मैं इस काम के प्राप्त कर सकते हैं, लेकिन मैं परेशान हूँ कि यह एक तरीका है कि क्या अपने स्वयं के प्रलेखन कहा के साथ लाइन में नहीं है में बर्ताव कर रही है।
क्यों नहीं कर रहा है कि वह क्या ने कहा कि यह होता? धन्यवाद।
कोशिश EqualityComparer.Default सीधे का उपयोग कर और अगर बेमेल कि कार्यान्वयन में है देखते हैं, या Linq विधि के साथ, शुरुआत के लिए। फिर परावर्तक खोलें और स्रोत की जांच करें और एमएसडीएन दस्तावेज़ों पर एक टिप्पणी जोड़ें? – MichaelGG
एक साइड नोड के रूप में, दस्तावेजों के रूप में व्यवहार नहीं करने वाली चीजें बग मानी जाती हैं, इसलिए मैं आपको इसे माइक्रोसॉफ्ट कनेक्ट जैसे सबमिट करने के लिए प्रोत्साहित करता हूं। रिकॉर्ड के लिए, मेरे पास अतीत में तय किए गए चैनल के माध्यम से सबमिट की गई छोटी प्रलेखन बग हैं। –