2010-12-16 9 views
15

GetHashCode() एक ही स्ट्रिंग के लिए एक अलग मान क्यों लौटा रहा है? मैं यह कैसे नकल करने का वर्णन नहीं कर सकते, लेकिन विश्वास है कि इस एक व्यावहारिक मजाक नहीं है और दो निम्नलिखित लाइनों दो अलग-अलग समय पर मेरी घड़ी खिड़की से आया है कि:स्ट्रिंग.गेटहाशकोड() अलग-अलग मान देता है

"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() -1386151123 int 
"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() 1858139950 int 

यह कैसे हो सकता है?

मुझे नहीं पता कि इससे मदद मिलती है, लेकिन मैं वीएस 2010 में .NET 4.0 पर चल रहा हूं और मैं एक NServiceBus एप्लिकेशन को डिबग कर रहा हूं।

अद्यतन:

आप को पता है कि मैं इस सूत्र पर यह देखने के लिए कर समाप्त हो गया चाहते हैं: Can you generate an x86 hash value when running in x64 mode?

उत्तर

11

अनुसार documentation रहे हैं:

तो दो स्ट्रिंग वस्तुओं के बराबर हैं , GetHashCode विधि समान मान देता है। हालांकि, प्रत्येक अद्वितीय स्ट्रिंग मान के लिए एक अद्वितीय हैश कोड मान नहीं है। अलग-अलग तार एक ही हैश कोड वापस कर सकते हैं।

इस प्रकार, कुछ अन्य प्रभाव अलग-अलग परिणाम देने के लिए दो कॉल के लिए खेलना चाहिए। एक सिद्धांत यह है कि आपने x86 से x64 या इसके विपरीत, कॉल के बीच प्लेटफॉर्म स्विच किए हैं।

+4

हाँ, आप सही हैं। मैंने पुष्टि की है कि एक कंसोल प्रोग्राम बनाकर और कंसोल को कॉल करके। राइटलाइन ("डीडीडी.एवेंट्स। एप्प्लिकेशन। एप्लीकेशन रिफरेंस क्रिएटिव" .GetHashCode())। फिर मैं मंच बदलता हूं और इसे फिर से चलाता हूं। लौटाए गए मूल्य वे मान हैं जिन्हें मैंने उपरोक्त वर्णित किया है। –

+1

कूल। मैंने यहां कुछ नया सीखा :) –

+0

मैं पुष्टि करता हूं कि यूनिट टेस्ट से हैश कोड बनाते समय मुझे एक ही समस्या थी और फिर उन्हें अपने मुख्य एप्लिकेशन में तुलना करना था। –