पर कोई प्रकार की कमी केवल अगर वे एक कुंजी के रूप में इस्तेमाल किया जा रहा है और आप वस्तु के ही उदाहरण के आधार पर तुल्यता नहीं करना चाहते हैं। यदि आप केवल सटीक समान उदाहरण के संदर्भों के बराबर होना चाहते हैं, तो आप ठीक हैं और कुछ भी करने की आवश्यकता नहीं है, लेकिन यदि आप अपने प्रकार को कुंजी के रूप में उपयोग कर रहे हैं, और आप "समकक्ष" उदाहरणों को बराबर मानना चाहते हैं, तो आपकी कक्षा को Equals()
लागू करना होगा और GetHashCode()
।
यदि आपका कस्टम प्रकार किसी मान के रूप में संग्रहीत किया जा रहा है, और कुंजी के रूप में उपयोग नहीं किया जाता है, तो यह आवश्यक नहीं है। उदाहरण के लिए, इस मामले में माईटाइप को Equals()
या GetHashCode()
ओवरराइड करने की आवश्यकता नहीं है क्योंकि इसे केवल मान के रूप में उपयोग किया जाता है, न कि स्टोरेज कुंजी के रूप में।
Dictionary<string, MyType> x;
हालांकि इस मामले में:
Dictionary<MyType, string> x;
आपका कस्टम प्रकार की कुंजी है, और इस प्रकार यह Equals()
और GetHashCode()
ओवरराइड करने के लिए की आवश्यकता होगी। GetHashCode()
का उपयोग यह निर्धारित करने के लिए किया जाता है कि यह किस स्थान पर है, और Equals()
हैश कोड (अन्य चीजों के साथ) पर टकराव को हल करने के लिए उपयोग किया जाता है।
कई LINQ
प्रश्नों से निपटने के दौरान आपको उसी दो तरीकों को ओवरराइड करना होगा। वैकल्पिक रूप से, आप यह निर्धारित करने के लिए कि दो उदाहरण बराबर हैं, आप अपनी कक्षा के अलावा एक स्टैंडअलोन IEqualityComparer
प्रदान कर सकते हैं।
स्रोत
2012-01-06 14:52:51
धन्यवाद, एक अच्छा जवाब। – alan2here