763 Stimmen

Richtige Methode zum Initialisieren eines C#-Wörterbuchs mit Werten

Ich erstelle ein Wörterbuch in einer C#-Datei mit folgendem Code:

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

Es gibt eine rote Linie unter new mit dem Fehler:

Feature 'collection initilializer' kann nicht verwendet werden, da es nicht Bestandteil der ISO-2 C#-Sprachspezifikation ist

Was passiert hier?

Ich benutze die .NET-Version 2.

1189voto

Haney Punkte 30328

Ich kann dieses Problem nicht in einer einfachen .NET 4.0-Konsolenanwendung reproduzieren:

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

        Console.ReadKey();
    }
}

Können Sie versuchen, es in einer einfachen Konsolenanwendung zu reproduzieren und von dort aus weiterzumachen? Es scheint wahrscheinlich, dass Sie .NET 2.0 (das dies nicht unterstützt) oder das Client-Profil-Framework als Ziel haben, anstatt eine Version von .NET zu verwenden, die die Initialisierungssyntax unterstützt.

349voto

Vikram Kumar Punkte 3856

Mit C# 6.0 können Sie ein Wörterbuch auf folgende Weise erstellen:

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

Es funktioniert sogar mit benutzerdefinierten Typen.

48voto

Brendan Punkte 984

Sie können ein Wörterbuch (und andere Sammlungen) inline initialisieren. Jedes Mitglied ist in geschweiften Klammern enthalten:

Dictionary students = new Dictionary
{
    { 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 } }
};

Siehe Wie initialisiere ich ein Wörterbuch mit einem Sammlungs-Initializer (C#-Programmierhandbuch) für Details.

46voto

Debendra Dash Punkte 4674

Angenommen, wir haben ein Wörterbuch wie dieses:

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

Wir können es wie folgt initialisieren.

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

19voto

Ed'ka Punkte 6055

Beachten Sie, dass C# 9 Target-typed new expressions ermöglicht, sodass bei Variablen oder Klassenmembern, die keine abstrakte Klasse oder Schnittstellentyp sind, Duplikate vermieden werden können:

    private readonly Dictionary FILE_TYPE_DICT = new ()
    {
        { "csv", XlFileFormat.xlCSV },
        { "html", XlFileFormat.xlHtml }
    };

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X