कोई विचार क्यों यह व्यवहार अलग है?शब्दकोश [इंडेक्स] एक KeyNotFoundException क्यों फेंकता है लेकिन हैशटेबल [अनुक्रमणिका] नहीं करता है?
शब्दकोश [इंडेक्स] एक KeyNotFoundException क्यों फेंकता है लेकिन हैशटेबल [अनुक्रमणिका] नहीं करता है?
उत्तर
यहां answer है।
प्राथमिक कारण शब्दकोश फेंकता है कि वहाँ कोई "त्रुटि" मूल्य है कि किसी भी वी Hashtable अशक्त वापस जाने के लिए कुंजी हमेशा एक संदर्भ प्रकार है, क्योंकि में सक्षम है पर काम करता है है।
वर्थ नोटिंग: 'हैशटेबल' इस तरह से असुरक्षित कोड लिखने की अनुमति देता है। 'var ht = new हैशटेबल() {{" ए ", शून्य}}; स्ट्रिंग aVal = (स्ट्रिंग) एचटी ["ए"]; स्ट्रिंग बीवीएल = (स्ट्रिंग) एचटी ["बी"]; 'दोनों वापसी' शून्य ', आप वैध मान या एक मौजूदा कुंजी के बीच अंतर नहीं कर सकते हैं। कम से कम बग छुपा हुआ है और चुप है जो इससे भी बदतर है, शब्दकोश आपको अपवाद के साथ बताएगा। –
तो जब शब्दकोश [कुंजी] का मूल्य शून्य मूल्य संग्रहीत करता है और जब कुंजी मौजूद नहीं होती है, तब कोई अस्पष्टता नहीं होगी। हैशटेबल [कुंजी] शून्य पर वापस आ जाएगा अगर यह शून्य या कुंजी मौजूद नहीं है।
प्राथमिक कारण शब्दकोश फेंकता राजनीतिक है - दक्षता को संरक्षित करने और उपयोग में आसानी के लिए कई विकल्प थे। यह वास्तव में एक विधि (TryGetValue) प्रदान करता है जो स्पष्ट रूप से प्रदर्शित करता है कि समझदार मूल्य वापस करने के लिए कथित "अक्षमता" के बारे में दावा झूठे हैं। TryGetValue हालांकि सटीक अजीब वाक्यविन्यास को मजबूर करता है कि वास्तव में क्या सूचकांक आसानी से कर सकता था।
सी # टेम्पलेट संदर्भ और मूल्य अर्थशास्त्र के लिए अलग-अलग कार्यान्वयन के निर्माण के लिए आसान तरीका प्रदान करते हैं और मूल्य semantice के साथ लापता वस्तुओं के निर्बाध हैंडलिंग के लिए दो अन्य सुविधाएं हैं जिनका उपयोग tempates और कुछ ऑपरेटरों (डिफ़ॉल्ट और शून्य) द्वारा किया जाता है। इसका मतलब है कि हैशटेबल के अर्थशास्त्र को तोड़ने का कोई तर्कसंगत कारण नहीं था।
यह एक लंबे समय तक एक संग्रह की अकादमिक धारणा के बीच राजनीतिक संघर्ष है जो जोर देता है कि हर किसी को "क्या आपके पास यह है" चेक और वास्तविक जीवन तथ्य है कि ऐसी कृत्रिम प्रक्रिया अक्षम है और धागे की सुरक्षा तोड़ती है - सिद्धांत रूप में (यह गैर-परमाणु acces बनाकर अन्यथा सुरक्षित कार्यान्वयन की थ्रेड-सुरक्षा तोड़ता है)।
मैं चाहता हूं कि 'TryXX' पैटर्न निर्दिष्ट है कि विफलता के मामले में विधि को 'डिफ़ॉल्ट (टी)' वापस करनी चाहिए, लेकिन यह इंगित करने के लिए 'आउट बूल' पैरामीटर का उपयोग करें कि यह काम करता है या नहीं। यह 'पुस्तक ठीक है; var theValue = myDict.TryGetValue (myKey, ठीक है); अगर (ठीक है) ... '। इस तरह का एक पैटर्न दोनों प्रकार की अनुमान और कॉन्वर्सिस की अनुमति देगा, और ऐसे मामले को भी सुविधाजनक बनाएगा जहां एक मौजूदा कुंजी के लिए वांछित व्यवहार 'डिफ़ॉल्ट (टी) 'के मान को मानना है। – supercat
- 1. सूची ConcurrentModificationException फेंकता है लेकिन सेट ConcurrentModificationException फेंकता नहीं है?
- 2. KeyNotFoundException
- 3. जेड-इंडेक्स क्यों काम नहीं करता है?
- 4. क्यों $() काम नहीं करता है लेकिन jQuery() काम करता है?
- 5. ग्रहण क्यों संकलित करता है, लेकिन जावैक नहीं करता है?
- 6. हैशटेबल बनाम शब्दकोश
- 7. XmlSerializer शब्दकोश का समर्थन क्यों नहीं करता है?
- 8. क्यों n.GetHashCode() काम करता है लेकिन n.GetType() फेंकता है और अपवाद?
- 9. ImageSourceConverter एक NullReferenceException फेंकता है ... क्यों?
- 10. SafeFileHandle.Close एक अपवाद फेंकता है लेकिन हैंडल मान्य है और
- 11. यूनिट परीक्षण अपवाद फेंकता है लेकिन संदेश
- 12. EndGetResponse ArgumentNullException क्यों फेंकता है?
- 13. शब्दकोश/H ++ में हैशटेबल ऑब्जेक्ट?
- 14. एकाधिक इंडेक्स वाले तालिका के लिए mysql अनुक्रमणिका ऑप्टिमाइज़ेशन जो कुछ कॉलमों को इंडेक्स करता है
- 15. MemoryStream.GetBuffer() हमेशा क्यों फेंकता है?
- 16. जेड-इंडेक्स काम नहीं करता है?
- 17. सरल getColumnName (0) कॉल फेंकता है अमान्य कॉलम अनुक्रमणिका: getValidColumnIndex
- 18. कोई शब्दकोश क्यों नहीं है। TamExcess()?
- 19. 'इंडेक्स' और 'सूची-अनुक्रमणिका'
- 20. क्या mysql अनुक्रमणिका शून्य मान करता है?
- 21. ऑन टच काम करता है, लेकिन OnClickListener नहीं करता है?
- 22. एक वापसी कथन के साथ एक कोशिश पकड़ काम के अंदर क्यों 'फेंकता है' करता है
- 23. शब्दकोश के लिए हैशटेबल <> सिंक्रूट।
- 24. .NET शब्दकोश, प्रभावशाली तेज़ लेकिन यह कैसे काम करता है?
- 25. जावा में हैश टेबल (हैशटेबल) में 'टी' क्यों नहीं है
- 26. यह क्रोम में काम करता है लेकिन आईई नहीं, क्यों?
- 27. GetCanonicalPath प्राप्त होने पर चेक अपवाद क्यों फेंकता है AbsolutePath नहीं करता है?
- 28. एक शब्दकोश में अनुक्रमणिका कैसे करें?
- 29. हैशटेबल कितनी मेमोरी का उपयोग करता है?
- 30. समानांतर .foreach काम करता है, लेकिन क्यों?
वही एक्स-जानना चाहते हैं- –