2010-12-17 15 views

उत्तर

25

उपयोग करने का प्रयास है, और अशक्त एक मूल्य के प्रकार के लिए मान्य नहीं है। उदाहरण के लिए:

var dict = new Dictionary<string, DateTime>(); 
DateTime date; 

if (dict.TryGetValue("foo", out date)) { 
    // Key was present; date is set to the value in the dictionary. 
} else { 
    // Key was not present; date is set to its default value. 
} 

इसके अलावा, एक शब्दकोश है कि संदर्भ प्रकार संग्रहीत करता है अभी भी शून्य मान स्टोर करेगा:

var dict = new Dictionary<string, DateTime>(); 
DateTime date = dict["foo"]; // What should happen here? date cannot be null! 

इसके बजाय आप शब्दकोश के TryGetValue विधि का उपयोग करना चाहिए। और आपका कोड "कुंजी मौजूद नहीं है" से अलग होने के लिए "मान शून्य है" पर विचार कर सकता है।

+0

यह वास्तव में डिजाइन निर्णय के कारण का पता नहीं है; वे आसानी से इसे शून्य के बजाय 'डिफॉल्ट (डेटटाइम)' वापस कर सकते थे। – Extragorey

+0

@Extragorey हां यह विशेष रूप से अंतिम वाक्य करता है: जो भी "नहीं मिला" मान है, आपको उस मूल्य को सार्थक के रूप में स्टोर करने की आवश्यकता हो सकती है। यदि कोई कुंजी नहीं मिलती है जो 'डिफ़ॉल्ट (दिनांक समय)' नहीं लौटाती है, तो आप कम से कम एक अतिरिक्त कॉल के बिना "मान डिफ़ॉल्ट '(दिनांक समय)' "और" कुंजी मौजूद नहीं है "के बीच अंतर नहीं कर सकते हैं। ConteyKey() '(जो ऑपरेशन की लागत को अनावश्यक रूप से दोगुना कर देगा)। एक शब्दकोष के लिए मान के रूप में संदर्भ प्रकार युक्त, शायद 'शून्य' एक अर्थपूर्ण स्थिति है "कुंजी मौजूद नहीं है" के अलावा। – cdhowie

+0

धन्यवाद, यह स्पष्टीकरण अधिक समझ में आता है। – Extragorey

3

माइक्रोसॉफ्ट फैसला किया है कि =)
एक इनलाइन की जाँच करें कि बचने के लिए।

object myvalue = dict.ContainsKey(mykey) ? dict[mykey] : null; 
3

व्यावहारिक कारण: क्योंकि एक शब्दकोश शून्य मूल्य को स्टोर कर सकता है। आप अपने परिदृश्य में अपवाद के साथ इस मामले को अलग करने में सक्षम नहीं होंगे।

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