नहीं अपने प्रश्न है, जो जोनास अच्छी तरह से उत्तर दिया है के लिए एक सीधा जवाब है, लेकिन इस सहायता के हो सकता है अगर आप हैश
हमारे परीक्षणों, क्या आप hashcodes साथ की आवश्यकता होती है पर निर्भर करता है से में समानता परीक्षण के बारे में चिंतित हैं, सी # में, हैशकोड को समानता संचालन के लिए अद्वितीय होने की आवश्यकता नहीं है। उदाहरण के तौर पर, निम्नलिखित पर विचार करें:
हमें बराबर ऑपरेटर को अधिभारित करने की आवश्यकता थी, और इसलिए हमारे ऑब्जेक्ट्स के गेटहाशकोड फ़ंक्शन के रूप में वे अस्थिर और स्टेटलेस बन गए थे, और डेटा से सीधे सोर्सिंग कर रहे थे, इसलिए एक ही स्थान पर यह एप्लिकेशन यह सुनिश्चित करने के लिए आवश्यक था कि किसी ऑब्जेक्ट को अन्य ऑब्जेक्ट के बराबर के रूप में देखा जा सके, यदि उसे उसी डेटा से सोर्स किया गया था, न कि यह वही संदर्भ था। हमारे अद्वितीय डेटा पहचानकर्ता गिड्स हैं।
बराबर ऑपरेटर को पूरा करने में आसान था क्योंकि हमने अभी रिकॉर्ड के ग्रिड (शून्य के लिए जांच के बाद) पर जांच की थी।
असहज रूप से हैशकोड डेटा आकार (एक int होने) ऑपरेटिंग सिस्टम पर निर्भर करता है, और हमारे 32 बिट सिस्टम पर, हैशकोड 32 बिट होगा। गणितीय रूप से, जब हम GetHashCode फ़ंक्शन को ओवरराइड करते हैं, तो 32 बिट से अधिक की एक ग्रिड से एक अद्वितीय हैशकोड उत्पन्न करना असंभव है (इसे विपरीत से देखें, आप 32 बिट पूर्णांक को ग्रिड में कैसे अनुवाद करेंगे?)।
हमने तब कुछ परीक्षण किए जहां हमने ग्रिड को एक स्ट्रिंग के रूप में लिया और ग्रिड के हैशकोड को वापस कर दिया, जो लगभग हमेशा हमारे परीक्षणों में एक अद्वितीय पहचानकर्ता देता है, लेकिन हमेशा नहीं।
हमने ऑब्जेक्ट किया है, जब कोई ऑब्जेक्ट हैश संग्रह संग्रह ऑब्जेक्ट (एक हैशटेबल, एक शब्दकोश इत्यादि) में है, जब 2 ऑब्जेक्ट अद्वितीय नहीं हैं लेकिन उनके हैशकोड हैं, हैशकोड केवल पहले विकल्प लुकअप के रूप में उपयोग किया जाता है, यदि गैर-अद्वितीय हैश कोड का उपयोग किया जा रहा है, समानता ऑपरेटर हमेशा समानता की पहचान करने के लिए गिरावट के रूप में उपयोग किया जाता है।
जैसा कि मैंने कहा था कि यह आपकी स्थिति के लिए प्रासंगिक हो सकता है या नहीं, लेकिन यदि यह एक आसान युक्ति है।
कुंजी:: वस्तु एक (हैशकोड 1), मूल्य वस्तु A1
कुंजी: ऑब्जेक्ट बी (हैशकोड 1), मूल्य वस्तु
अद्यतन
प्रदर्शित करने के लिए, हम एक Hashtable है बी 1
कुंजी: ऑब्जेक्ट सी (हैशकोड 1), मूल्य वस्तु सी 1
कुंजी: ऑब्जेक्ट डी (हैशकोड 2), मूल्य ओब अस्वीकृत डी 1
कुंजी: ऑब्जेक्ट ई (हैशकोड 3), मूल्य वस्तु E1
जब मैं वस्तु एक के प्रमुख के साथ वस्तु के लिए hashtable फोन, वस्तु A1 2 चरणों के बाद वापस कर दी जाएगी, के लिए एक कॉल हैशकोड 1, फिर कुंजी ऑब्जेक्ट पर एक समानता जांच है क्योंकि हैशकोड 1
जब मैं ऑब्जेक्ट डी की कुंजी के साथ ऑब्जेक्ट के लिए हैशटेबल को कॉल करता हूं, तो ऑब्जेक्ट डी 1 1 चरण के बाद वापस कर दिया जाएगा , हैश लुकअप
निष्कर्ष: 'GetHashCode() 'के परिणाम को जारी या प्रसारित न करें। इसे केवल अपने इच्छित उद्देश्य के लिए उपयोग करें: हैश टेबल के उपयोग को सुविधाजनक बनाने के लिए। –