2012-06-12 17 views
16

के इनलाइन प्रारंभिकरण के माध्यम से किसी शब्दकोश में मूल्य जोड़ना मेरे पास निम्नलिखित City कक्षा है। प्रत्येक शहर वस्तु में एक शब्दकोश होता है जो कुंजी भाषा टैग होते हैं (मान लें: "एन", "डीई", "एफआर" ...) और संबंधित मूल्यों में शहर के नाम कौन से मूल्य हैं (उदा: रोम/रोम इत्यादि) ।अपने कंटेनर

public City(string cityName) 
    { 
    this.LocalizedNames.Add("EN", cityName); 
    } 

यहाँ सवाल आता है::

public class City: 
{ 
    private IDictionary<string, string> localizedNames = new Dictionary<string, string>(0); 
    public virtual IDictionary<string, string> Names 
    { 
    get { return localizedNames ; } 
    set { localizedNames = value; } 
    } 
} 

शहरों में से अधिकांश वही नाम हैं जो कुछ भी भाषा तो City निर्माता वास्तव में अंग्रेजी मानचित्रण बनाता है है वहाँ जोड़ने के लिए एक रास्ता है इनलाइन प्रारंभिकरण के माध्यम से अन्य मूल्य?

मैं का अर्थ सफलता के बिना निम्नलिखित (संकलन नहीं करता है) विभिन्न रूपों की कोशिश की:

AllCities.Add(new City("Rome") { Names["DE"] = "Rom" }; 

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

AllCities.Add(new City("Rome") { Names = new Dictionary<string, string>() { { "DE", "Rom" } } }; 

कोई भी जानता है कि यह संभव है?

+0

ध्यान दें: * निर्माता प्रारंभ * नहीं उचित शब्दावली है। सोचें ** ऑब्जेक्ट ** और ** संग्रह ** प्रारंभिकरण, इनमें से कोई भी कन्स्ट्रक्टर के माध्यम से नहीं किया जाता है। –

+0

आप सही हैं, मैंने शीर्षक संपादित किया है, धन्यवाद –

उत्तर

16
AllCities.Add(new City("Rome") { Names = { { "DE", "Rom" }, { "...", "..." } } }); 

यह प्रारंभ विधि को आमंत्रित करने के लिए प्रारंभकर्ता वाक्यविन्यास का उपयोग कर रहा है।

+0

यह कन्स्ट्रक्टर में जोड़े गए मूल्य को ओवरराइट करेगा, जैसे पूछताछकर्ता द्वारा प्रदान किया गया अंतिम कोड ब्लॉक होगा। – Rawling

+3

नहीं, यह नहीं होगा। यह मौजूदा शब्दकोश में जोड़ देगा। यह एक नया नहीं बनाएगा। – usr

+0

... तुमने मुझे मिला, मैंने कोशिश नहीं की। थोड़ा समय दीजिये। यदि आप सही हैं तो मैं नम्रता से माफी मांगूंगा। – Rawling

6

इस वास्तविक इनलाइन intialization है:

private IDictionary<string, string> localizedNames = new Dictionary<string, string>{ 
    {"key1","value1"}, 
    {"key2","value2"} 
}; 
संबंधित मुद्दे