मैं समुदाय से सुनना चाहता हूं कि मुझे अपने ऑब्जेक्ट के लिए GetHashCode (या इसे ओवरराइड करने) के बारे में कैसे जाना चाहिए। मैं समझता हूं कि अगर मैं बराबर विधि को ओवरराइड करता हूं तो मुझे ऐसा करने की ज़रूरत है। मैंने इसे उचित समय लागू किया है, कभी-कभी केवल बेस विधि को बुलाता है। मैं समझता हूं कि मेरे ऑब्जेक्ट को ऑब्जेक्ट के दूसरे उदाहरण के बराबर होना चाहिए यदि इसमें समान विवरण (सदस्य) हैं। कक्षा के सदस्यों से हैश कोड प्राप्त करने का सबसे अच्छा तरीका क्या है?GetHashCode को सही ढंग से कार्यान्वित करना
उत्तर
मान लें कि आपका वर्ग इस तरह दिखता है:
class Frob {
public string Foo { get; set; }
public int Bar { get; set; }
public double FooBar { get; set; }
}
की आप को परिभाषित के बराबर होती है मान लीजिए ताकि Frob
के दो उदाहरणों के बराबर हैं यदि उनके Foo
और उनके Bar
बराबर हैं, लेकिन FooBar
फर्क नहीं पड़ता।
तो आपको Foo
और Bar
के संदर्भ में GetHashCode
परिभाषित करना चाहिए। एक तरीका इस तरह है:
return this.Foo.GetHashCode() * 17 + this.Bar.GetHashCode();
असल में, आप केवल समानता को परिभाषित करने वाले सभी क्षेत्रों को शामिल करना चाहते हैं। एक तरीका यह है कि मैंने 17 जैसे ही जमा किया है और गुणा करना है। यह तेज़ है, यह आसान है, यह सही है, और यह आमतौर पर एक अच्छा वितरण देता है।
ओवरराइड करने की आवश्यकता नहीं है। मुझे लगता है कि यह एक सवाल होना चाहिए, लेकिन 23 क्यों? –
{2,1} और {1,2} बनाने के लिए प्राइम कारक अलग-अलग हैं। –
शायद इंगित करें कि GetHashCode केवल आपको बताता है कि क्या दो ऑब्जेक्ट ** ** बराबर माना जा सकता है। हैश टकराव की स्थिरता अभी भी है। – geofftnz
- 1. रीढ़ की हड्डी तुलनाकर्ताओं को सही ढंग से कार्यान्वित करें
- 2. NSManagedObjectContext सही ढंग से
- 3. कैसे सही ढंग से
- 4. सही ढंग से
- 5. रूबी सही ढंग से
- 6. सही ढंग से छोरों
- 7. एक ओपन सोर्स लाइसेंस को सही ढंग से लागू करना
- 8. स्विंग घटकों को सही ढंग से अपडेट करना
- 9. प्ले करें! H2 को सही ढंग से बंद नहीं करना
- 10. Django: फ़ॉर्मेट त्रुटियों को सही ढंग से प्रदर्शित करना
- 11. निर्माता रखने को सही ढंग से विरासत
- 12. हिंदी भाषा को सही ढंग से tcpdf
- 13. बाध्यकारी StringFormat सही ढंग से
- 14. IEqualityComparer <double>; GetHashCode को कैसे कार्यान्वित करें?
- 15. स्विंग के साथ जावा में एमवीसी को सही ढंग से कैसे कार्यान्वित करें?
- 16. वीबीओ का सही ढंग से उपयोग करना सीखना
- 17. TBitmap की स्कैनलाइन पहुंच को सही ढंग से कैसे कार्यान्वित करें?
- 18. निष्पादकों से RuntimeExceptions को सही ढंग से कैसे पकड़ें?
- 19. didReceiveWriteRequests को सही ढंग से कार्यान्वित करने के लिए कैसे करें? iOS6 CoreBluetooth
- 20. मैं एफ # में एक संपत्ति को सही ढंग से कैसे कार्यान्वित करूं?
- 21. जावास्क्रिप्ट में एक स्लाइडिंग एनीमेशन को सही ढंग से कैसे कार्यान्वित करें?
- 22. GAE में सत्रों को प्रभावी ढंग से कार्यान्वित कैसे करें?
- 23. पास विधि सही ढंग से (CA1063)
- 24. कमांड लाइन इनपुट कार्य सही ढंग से
- 25. MSBuildExtensionsPath32 सही ढंग से सेट नहीं है?
- 26. सही ढंग से कैसे निकालें FromSuperview?
- 27. कैसे सही ढंग से एक ईवेंट हैंडलर
- 28. बूलियन से GetHashCode() केवल
- 29. वीबीस्क्रिप्ट एमएसआई फ़ाइल से सही ढंग से निष्पादित नहीं होगा
- 30. JAVA_HOME सही ढंग से करते हुए
http://stackoverflow.com/a/720282/93922 –
के डुप्लिकेट के रूप में बंद करने पर विचार करें, ऐसा करने से पहले, मैं अनुशंसा करता हूं कि आप मेरे लेख को पढ़ और समझें: http://blogs.msdn.com/b /ericlippert/archive/2011/02/28/guidelines-and-rules-for-gethashcode.aspx –
धन्यवाद, मैं समझता हूं कि यह एक आम प्रश्न हो सकता है और मुझे थोड़ा और शिकार करना चाहिए था। आपकी मदद के लिए धन्यवाद – Zivka