De juiste manier om een C#-woordenboek met waarden te initialiseren?

Ik maak een woordenboek in een C#-bestand met de volgende code:

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

Er staat een rode lijn onder newmet de fout:

Functie ‘collection initializer’ kan niet worden gebruikt omdat het geen deel uitmaakt van de ISO-2 C#-taalspecificatie

Kan iemand uitleggen wat hier aan de hand is?

Ik gebruik .NET versie 2.


Antwoord 1, autoriteit 100%

Ik kan dit probleem niet reproduceren in een eenvoudige .NET 4.0-consoletoepassing:

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

Kun je proberen het in een eenvoudige consoletoepassing te reproduceren en van daaruit verder te gaan? Het lijkt erop dat u zich richt op .NET 2.0 (dat dit niet ondersteunt) of een clientprofielframework, in plaats van een versie van .NET die de initialisatiesyntaxis ondersteunt.


Antwoord 2, autoriteit 26%

Met C# 6.0 kunt u op de volgende manier een woordenboek maken:

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

Het werkt zelfs met aangepaste typen.


Antwoord 3, autoriteit 4%

Je kunt een Dictionary(en andere collecties) inline initialiseren. Elk lid is ingesloten met beugels:

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 } }
};

Zie Microsoft Docsvoor details.


Antwoord 4, autoriteit 3%

Stel dat we een dergelijk woordenboek hebben

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

We kunnen het als volgt initialiseren.

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

Antwoord 5

Object-initialisatoren zijn geïntroduceerd in C# 3.0, controleer op welke frameworkversie u zich richt.

Overzicht van C# 3.0


Antwoord 6

Met С# 6.0

var myDict = new Dictionary<string, string>
{
    ["Key1"] = "Value1",
    ["Key2"] = "Value2"
};

Antwoord 7

Code ziet er goed uit. Probeer gewoon de. Netto framework naar v2.0 +

Other episodes