मानों के साथ C # शब्दकोश को आरंभ करने का उचित तरीका?


513

मैं निम्नलिखित कोड के साथ C # फ़ाइल में एक शब्दकोश बना रहा हूं:

private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT
        = new Dictionary<string, XlFileFormat>
        {
            {"csv", XlFileFormat.xlCSV},
            {"html", XlFileFormat.xlHtml}
        };

newत्रुटि के तहत एक लाल रेखा है :

फ़ीचर 'संग्रह initilializer' का उपयोग नहीं किया जा सकता क्योंकि यह ISO-2 C # भाषा विनिर्देश का हिस्सा नहीं है

क्या कोई समझा सकता है कि यहां क्या चल रहा है?

संपादित करें: ठीक है, इसलिए यह पता चला कि मैं .NET संस्करण 2 का उपयोग कर रहा था।


3
लक्षित फ्रेमवर्क संस्करण बदलें या आरंभीकरण के "पुराने" तरीके का उपयोग करें।
सेबस्टियन ओमेल

इस कोड को आप किस संदर्भ में रखते हैं? एक .csफाइल जो विजुअल स्टूडियो द्वारा संकलित की जाती है, या एक में .cshtml? क्या आपके प्रोजेक्ट फ़ाइल में एक languageVersionतत्व है ?
कोडकेस्टर

जवाबों:


825

मैं एक साधारण .NET 4.0 कंसोल अनुप्रयोग में इस समस्या को पुन: उत्पन्न नहीं कर सकता:

static class Program
{
    static void Main(string[] args)
    {
        var myDict = new Dictionary<string, string>
        {
            { "key1", "value1" },
            { "key2", "value2" }
        };

        Console.ReadKey();
    }
}

क्या आप इसे एक साधारण कंसोल एप्लिकेशन में पुन: पेश करने और वहां से जाने की कोशिश कर सकते हैं? ऐसा लगता है कि आप .NET 2.0 के एक संस्करण के बजाय .NET 2.0 (जो इसका समर्थन नहीं करता है) या क्लाइंट प्रोफाइल फ्रेमवर्क को लक्षित कर रहे हैं, जो आरंभीकरण सिंटैक्स का समर्थन करता है।


11
समस्या सी # ओपी के संस्करण का उपयोग कर रही है, ऑब्जेक्ट / संग्रह आरंभीकरण को सी # 3.0 तक पेश नहीं किया गया था। कारण है कि यह पहले काम नहीं किया है के रूप में विस्तार पहले से ही किया गया है जवाब
जेम्स

@ नाम - इस तरह इंगित करने के लिए संपादित।
हनी

मैं यह कैसे जाँचूँ कि C # के किस संस्करण का उपयोग कर रहा हूँ या इसे बदल रहा हूँ?
azrosen92

3
परियोजना के गुणधर्म रूपरेखा के लक्ष्य संस्करण का संकेत देंगे।
हनी

2
@James - मज़बूती से नहीं, हालाँकि, इस व्यक्ति को एक समाधान में कुछ विरासत का काम मिल सकता है जो 2.0 को लक्षित कर रहा था और उदाहरण के लिए इसके बारे में पता नहीं है।
हनी

196

C # 6.0 के साथ, आप निम्नलिखित तरीके से एक शब्दकोश बना सकते हैं:

var dict = new Dictionary<string, int>
{
    ["one"] = 1,
    ["two"] = 2,
    ["three"] = 3
};

यह भी कस्टम प्रकार के साथ काम करता है।


8
इस नए वाक्य रचना में अधिक रुचि रखने वाले लोगों के लिए यहाँ अच्छा ब्लॉग पोस्ट है: marcin-chwedczuk.github.io/…
csharpfolk

1
यह इनलाइन घोषणा के लिए एकदम सही है।
तिरुमोनियम

1
अच्छा - पता नहीं था इस तरह के शुरुआती। थोड़ा सा लगता है पायथन)) धन्यवाद!
मिखाइल टी।

मुझे आपका तरीका अच्छा लगता है, लेकिन ध्यान दें कि यह प्रति पंक्ति (4) के "बायलरप्लेट" वर्णों की ठीक उसी संख्या का उपयोग करता है, जैसा कि {"key2", "value2"} के साथ स्वीकृत उत्तर के रूप में,
Maxter

35

आप Dictionary(और अन्य संग्रह) इनलाइन को इनिशियलाइज़ कर सकते हैं । प्रत्येक सदस्य ब्रेसिज़ के साथ निहित है:

Dictionary<int, StudentName> students = new Dictionary<int, StudentName>
{
    { 111, new StudentName { FirstName = "Sachin", LastName = "Karnik", ID = 211 } },
    { 112, new StudentName { FirstName = "Dina", LastName = "Salimzianova", ID = 317 } },
    { 113, new StudentName { FirstName = "Andy", LastName = "Ruth", ID = 198 } }
};

देखें MSDN जानकारी के लिए।


21

मान लीजिए कि हमारे पास इस तरह का एक शब्दकोष है

Dictionary<int,string> dict = new Dictionary<int, string>();
dict.Add(1, "Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");

हम इसे अनुसरण के रूप में आरंभ कर सकते हैं।

Dictionary<int, string> dict = new Dictionary<int, string>  
{
    { 1, "Mohan" },
    { 2, "Kishor" },
    { 3, "Pankaj" },
    { 4, "Jeetu" }
};

जवाब देने वाला जवाब।
एंटनी बूथ


0

सी # 6.0 के साथ

static class Program
{
    static void Main(string[] args)
    {
        var myDict = new Dictionary<string, string>
        {
           ["Key1"]="Value1",
           ["Key2"]="Value2"
        };

        Console.ReadKey();
    }
}

2
यह पहले से ही उत्तर दिया गया है। कुछ भी नया नहीं जोड़ रहा है।
नवाफाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.