2013-06-02 4 views
5

पुराने दिनों में, हम आसानी से परिवर्तनशील संग्रह ब्रेसिज़ का उपयोग कर, निम्न उदाहरण में प्रारंभ कर सकते हैं:क्या मैं ब्रेसिज़ का उपयोग कर बीसीएल अपरिवर्तनीय संग्रह को प्रारंभ कर सकता हूं?

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}; 

वहां भी इसी तरह सिंटैक्स बीसीएल अपरिवर्तनीय संग्रह के साथ इस्तेमाल किया जा सकता है? मैं समझता हूं कि यह अभी भी एक प्री-रिलीज है लेकिन शायद एक अनुशंसित वाक्यविन्यास है, या कम से कम यह प्रश्न इन सुविधाजनक प्रारंभकर्ताओं को लागू करने के लिए प्रतिक्रिया के रूप में कार्य करेगा।

var myDictionary = new Dictionary<string, decimal> {{"hello", 0m}, {"world", 1m}}.ToImmutableDictionary(); 

उत्तर

7

वहां भी इसी तरह सिंटैक्स बीसीएल अपरिवर्तनीय संग्रह के साथ इस्तेमाल किया जा सकता है:

इस बीच, कम से कम मैं पाया है निम्नलिखित है?

जहाँ तक नहीं के रूप में मुझे पता है हूँ - दुर्भाग्य से दोनों वस्तु और संग्रह initializers अस्थिरता पर भरोसा करते हैं। उस संबंध में यह एक शर्म की बात है कि भाषा इस प्रकार डिज़ाइन नहीं की गई है कि यदि वापसी मूल्य के साथ Add विधि है, तो इसे मध्यवर्ती मान के रूप में उपयोग किया जा सकता है। (यही कारण है कि वस्तु initializers में गुण स्थापित करने के साथ मदद मिलेगी नहीं, आप बुरा है, और मैं PlusAdd के नाम पसंद करते हैं अर्थ विज्ञान स्पष्ट करने के।)

मुझे लगता है कि दृष्टिकोण आप पहले से ही उपयोग कर रहे हैं के लिए सबसे उपयुक्त एक है एक लघुपरिपथ।

ImmutableList के लिए यह थोड़ा आसान है:

var list = ImmutableList.Create(1, 2, 3); 

जो काफी सरल है (और प्रकार निष्कर्ष के लिए अनुमति देता है) लेकिन मैं ImmutableDictionary के लिए इसी तरह कुछ भी पता नहीं है। Create का अधिभार है जो IEnumerable<TKey, TValue> लेता है, लेकिन किसी भी कार्यान्वयन का निर्माण संभवतः म्यूटेबल डिक्शनरी के निर्माण के रूप में संभवतः उतना ही हो सकता है जितना आप पहले से कर रहे हैं।

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

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