पर कास्ट करें क्या ConcurrentDictionary से IDictionary तक कास्ट थ्रेड-सुरक्षित कार्यान्वयन को काटता है, क्योंकि IDictionary में GetOrAdd और AddOrUpdate विधियां नहीं हैं?ConcurrentDictionary से IDictionary
उत्तर
परिणामस्वरूप ऑब्जेक्ट अभी भी एक समवर्ती शब्दकोश होगा। जोड़ें या निकालें जैसे अंतर्निहित कार्यान्वयन TryAdd और TryRemove (जो थ्रेड-सुरक्षित हैं) का उपयोग करें। किसी ऑब्जेक्ट को किसी भिन्न प्रकार पर कास्ट करना ऑब्जेक्ट को स्वयं नहीं बदलता है।
इसके अलावा, स्पष्टीकरण के लिए, आप आईएलएसपी जैसे टूल्स का उपयोग कर सकते हैं यह देखने के लिए कि डिफ़ॉल्ट IDictionary विधियों के कार्यान्वयन क्या हैं और क्या वे अभी भी थ्रेड-सुरक्षित होंगे।
आप 'IDictionary
IDictionary
सिर्फ एक इंटरफ़ेस है। यदि आप इसे डाले हैं, तो परिणाम ConcurrentDictionary का कार्यान्वयन है, GetOrAdd
और AddOrUpdate
विधियों को याद कर रहा है।
मुमकिन है, तो आप अभी भी तरीके (GetOrAdd
और AddOrUpdate
के एवज में) Item
संपत्ति और Add
और ContainsKey
तरीकों का उपयोग कर सकते हैं, और अपने casted वस्तु अभी भी धागा सुरक्षित हो जाएगा (के बाद से अंतर्निहित कार्यान्वयन एक ConcurrentDictionary
है)।
यह IDictionary
आकार का ताली लगाने का छेद के माध्यम से बड़ा ConcurrentDictionary
वस्तु को देख की तरह हो सकता है - आप केवल IDictionary
आकार देख सकते हैं लेकिन यह अभी भी ConcurrentDictionary
होगा।
संक्षिप्त उत्तर संख्या।
आप किसी ऑब्जेक्ट के माध्यम से किसी ऑब्जेक्ट में हेरफेर कर रहे हैं और इसलिए अभी भी ठोस कार्यान्वयन का उपयोग कर रहे हैं। आप किसी भी कार्यक्षमता और न ही इसकी विधियों को खो रहे हैं। वे अभी उपलब्ध नहीं हैं।
साइड नोट पर, डाउनकास्टिंग के दौरान आपको एक स्पष्ट कलाकार की आवश्यकता होती है, जब उपेक्षित होने पर स्पष्ट कलाकार की आवश्यकता नहीं होती - हमेशा ऐसा करने के लिए सुरक्षित होता है।
क्षमा करें लेकिन ConcurrentDictionary दो नए जोड़ें विधियों और दूसरों को छुपाएं, इसलिए इसका कार्यान्वयन केवल नए तरीकों के लिए थ्रेड-सुरक्षित जोड़ सकता है, न कि छुपा तरीकों के लिए। एमएसडीएन दस्तावेज इसे स्पष्ट नहीं करता है, इसलिए मैंने उससे पूछा।लेकिन जब मैंने सबसे अच्छी टिप्पणियां पढ़ीं और मैंने ConcurrentDictionary प्रोटोटाइप पर एक नज़र डाली, मैंने देखा कि यह शब्दकोश को विस्तारित नहीं करता है, और इससे मुझे आश्वस्त किया गया कि यह असंभव है कि इसे IDictionary को कास्टिंग करने पर अप्रत्यक्ष रूप से विस्तारित संस्करण शब्दकोश का उपयोग किया जाएगा। – Luciano
- 1. ConcurrentDictionary
- 2. ILookup इंटरफ़ेस बनाम IDictionary
- 3. ConcurrentDictionary TryRemove वापस झूठी
- 4. ConcurrentDictionary गणना और लॉकिंग
- 5. चयन सूची में IDictionary?
- 6. एक ConcurrentDictionary छंटाई द्वारा मूल्य
- 7. ConcurrentDictionary की आशावादी रूप से समवर्ती निकालें विधि
- 8. ConcurrentDictionary - टूटी हुई शब्दकोश या खराब कोड?
- 9. पोर्टेबल क्लास लाइब्रेरी और .NET ConcurrentDictionary
- 10. ConcurrentDictionary कर सकते हैं। कोशिश करें विफल?
- 11. ब्लॉकिंग कोलेक्शन में ConcurrentDictionary को कैसे लपेटें?
- 12. शैली में एक अंतर: IDictionary बनाम शब्दकोश
- 13. IDictionary <string, string> या nameValueCollection
- 14. कन्स्ट्रक्टर में IDictionary को कैसे प्रारंभ करें?
- 15. सी # .NET 4.0 ConcurrentDictionary: एक लॉक के भीतर कोशिश करें?
- 16. IDictionary <TKey, TValue> .NET 4 में .NET में
- 17. सी # डिक्शनरी सभी IDictionary क्यों लागू नहीं करता है?
- 18. सी # - एक IDictionary कार्यान्वयन कि एक अशक्त कुंजी
- 19. IDictionary <स्ट्रिंग, स्ट्रिंग> कुंजी को लोअरकेस (सी #)
- 20. जेएसओएन को क्रमशः IDictionary <string, object>
- 21. "Verbose शब्दकोश" सी # में, 'ओवरराइड नए' यह [] या लागू IDictionary
- 22. CA1006 से बचने के लिए जेनेरिक आईनेमेरेबल या IDictionary को कैसे कार्यान्वित करें?
- 23. IDictionary <T, U> जैसे इंटरफेस से प्राप्त करते समय कोड अनुबंध का उपयोग कैसे करें?
- 24. ConcurrentDictionary Pitfall - GetOrAdd और AddOrUpdate सिंक्रनाइज़ किए गए प्रतिनिधि कारखानों हैं?
- 25. कैसे ConcurrentDictionary का उपयोग किया जाता है और इसे क्रमबद्ध कैसे किया जाता है?
- 26. ConcurrentDictionary <TKey,TValue> बनाम शब्दकोश <TKey,TValue>
- 27. ConcurrentDictionary का उपयोग करके एक कस्टम अवलोकन योग्य संग्रह कैसे बनाएं, INotifyCollectionChanged, INotifyPropertyChanged
- 28. मैं एक ConcurrentDictionary को एक शब्दकोश में कैसे परिवर्तित कर सकता हूं?
- 29. कैसे IDictionary में केस संवेदनशीलता ओवरराइड करने के लिए <स्ट्रिंग, स्ट्रिंग>
- 30. Fluent NHibernate में IDictionary <string, object> को कैसे मैप करें?
आपका मतलब "कट", ठीक है? क्या यह इसे 'ConcurrentDictionary' से हटा देता है? नहीं। क्या यह 'IDictionary' इंटरफ़ेस से उपलब्ध है? सं। –
@JamesMichaelHare: उसका मतलब है कि, यदि आप 'IDictionary' पर आते हैं, तो क्या यह परिणामी ऑब्जेक्ट थ्रेड-असुरक्षित बनाता है? दूसरे शब्दों में, क्या यह इसे सामान्य शब्दकोश में बदल देता है? –
क्या यह अभी भी धागा-सुरक्षित होगा? हां, क्योंकि यह उन परिचालनों के बिना हो सकता है। यही है, अगर आपको परमाणु 'GetOrAdd() 'की आवश्यकता है तो आप भाग्य से बाहर होंगे। –