c# - Dictionary.ContainsKey() not working as expected -


मेरे पास शब्दकोश है।

  शब्दकोश & lt; ymd, object & gt; कैश = नया शब्दकोश & lt; YMD, ऑब्जेक्ट & gt; ();  

वाईएमडी वर्ग मेरे आविष्कारों में से एक है, यह एक वर्ग है जिसमें केवल वर्ष, महीना और तारीख शामिल है। इसका उद्देश्य यह है कि दिन के आधार पर डेटा को अनुक्रमित किया जाएगा। किसी भी तरह, मैंने इक्ल्स () और तुलना करें () फ़ंक्शंस, साथ ही साथ == और! = ऑपरेटर को कार्यान्वित किया है।

इसके बावजूद, डिक्शनरी। कंटन की () फ़ंक्शन हमेशा झूठा लौटाएगा, भले ही कुंजी मौजूद है।

मैंने तुरंत सोचा कि मेरी तुलनात्मक कार्यों को तोड़ा जाना चाहिए, लेकिन उन सभी के लिए यूनिट परीक्षण लिखने के बाद यह मामला नहीं दिखाई देता है।

शब्दकोश क्लास जिसे मैं नहीं जानता?

शब्दकोश के साथ, GetHashCode () महत्वपूर्ण है उन चीजों के लिए जो समान हैं ( equals () == सच ) यह चाहिए उसी नंबर को वापस करेगा (लेकिन उसे टकराव की अनुमति है - यानी दो आइटम एक ही नंबर वापस कर सकते हैं संयोग से, लेकिन बराबर नहीं माना जाता है)।

इसके अतिरिक्त - आइटम को शब्दकोश में रखते हुए हैश-कोड को नहीं बदलना चाहिए readonly पर हैशिंग इस के लिए अच्छा है, लेकिन वैकल्पिक रूप से: बस इसे बदल नहीं है! उदाहरण के लिए, यदि आपकी बराबर / हैशोड एक संस्थाएं नाम और आईडी (कहते हैं), तो ऑब्जेक्ट के उन गुणों को परिवर्तित नहीं करें, या आप उस रिकॉर्ड को कभी नहीं देख सकते हैं फिर से (भले ही आप कुंजी के रूप में एक ही उदाहरण में पास)।


Comments

Popular posts from this blog

.net - C# List<T>.Find(x=>x.Rectangle.Contains(Point)) FAIL -

iphone - Smoothing a rounded stroke in Core Graphics -

Best practice for URL redirection in ASP.NET web application -