2009-11-09 8 views

उत्तर

16

यहां answer है।

प्राथमिक कारण शब्दकोश फेंकता है कि वहाँ कोई "त्रुटि" मूल्य है कि किसी भी वी Hashtable अशक्त वापस जाने के लिए कुंजी हमेशा एक संदर्भ प्रकार है, क्योंकि में सक्षम है पर काम करता है है।

+0

वर्थ नोटिंग: 'हैशटेबल' इस तरह से असुरक्षित कोड लिखने की अनुमति देता है। 'var ht = new हैशटेबल() {{" ए ", शून्य}}; स्ट्रिंग aVal = (स्ट्रिंग) एचटी ["ए"]; स्ट्रिंग बीवीएल = (स्ट्रिंग) एचटी ["बी"]; 'दोनों वापसी' शून्य ', आप वैध मान या एक मौजूदा कुंजी के बीच अंतर नहीं कर सकते हैं। कम से कम बग छुपा हुआ है और चुप है जो इससे भी बदतर है, शब्दकोश आपको अपवाद के साथ बताएगा। –

6

तो जब शब्दकोश [कुंजी] का मूल्य शून्य मूल्य संग्रहीत करता है और जब कुंजी मौजूद नहीं होती है, तब कोई अस्पष्टता नहीं होगी। हैशटेबल [कुंजी] शून्य पर वापस आ जाएगा अगर यह शून्य या कुंजी मौजूद नहीं है।

2

प्राथमिक कारण शब्दकोश फेंकता राजनीतिक है - दक्षता को संरक्षित करने और उपयोग में आसानी के लिए कई विकल्प थे। यह वास्तव में एक विधि (TryGetValue) प्रदान करता है जो स्पष्ट रूप से प्रदर्शित करता है कि समझदार मूल्य वापस करने के लिए कथित "अक्षमता" के बारे में दावा झूठे हैं। TryGetValue हालांकि सटीक अजीब वाक्यविन्यास को मजबूर करता है कि वास्तव में क्या सूचकांक आसानी से कर सकता था।

सी # टेम्पलेट संदर्भ और मूल्य अर्थशास्त्र के लिए अलग-अलग कार्यान्वयन के निर्माण के लिए आसान तरीका प्रदान करते हैं और मूल्य semantice के साथ लापता वस्तुओं के निर्बाध हैंडलिंग के लिए दो अन्य सुविधाएं हैं जिनका उपयोग tempates और कुछ ऑपरेटरों (डिफ़ॉल्ट और शून्य) द्वारा किया जाता है। इसका मतलब है कि हैशटेबल के अर्थशास्त्र को तोड़ने का कोई तर्कसंगत कारण नहीं था।

यह एक लंबे समय तक एक संग्रह की अकादमिक धारणा के बीच राजनीतिक संघर्ष है जो जोर देता है कि हर किसी को "क्या आपके पास यह है" चेक और वास्तविक जीवन तथ्य है कि ऐसी कृत्रिम प्रक्रिया अक्षम है और धागे की सुरक्षा तोड़ती है - सिद्धांत रूप में (यह गैर-परमाणु acces बनाकर अन्यथा सुरक्षित कार्यान्वयन की थ्रेड-सुरक्षा तोड़ता है)।

+2

मैं चाहता हूं कि 'TryXX' पैटर्न निर्दिष्ट है कि विफलता के मामले में विधि को 'डिफ़ॉल्ट (टी)' वापस करनी चाहिए, लेकिन यह इंगित करने के लिए 'आउट बूल' पैरामीटर का उपयोग करें कि यह काम करता है या नहीं। यह 'पुस्तक ठीक है; var theValue = myDict.TryGetValue (myKey, ठीक है); अगर (ठीक है) ... '। इस तरह का एक पैटर्न दोनों प्रकार की अनुमान और कॉन्वर्सिस की अनुमति देगा, और ऐसे मामले को भी सुविधाजनक बनाएगा जहां एक मौजूदा कुंजी के लिए वांछित व्यवहार 'डिफ़ॉल्ट (टी) 'के मान को मानना ​​है। – supercat

संबंधित मुद्दे