web-dev-qa-db-fra.com

Moyen approprié pour initialiser un dictionnaire C # avec des valeurs?

Je crée un dictionnaire dans un fichier C # avec le code suivant:

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

Il y a une ligne rouge sous new avec l'erreur:

La fonctionnalité 'collection initilializer' ne peut pas être utilisée car elle ne fait pas partie de la spécification du langage ISO-2 C #

Quelqu'un peut-il expliquer ce qui se passe ici?

EDIT: OK, il s’avère que j’utilisais .NET version 2.

409
azrosen92

Je ne peux pas reproduire ce problème dans une application console .NET 4.0 simple:

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

        Console.ReadKey();
    }
}

Pouvez-vous essayer de le reproduire dans une application console simple et partir de là? Il semble probable que vous ciblez .NET 2.0 (qui ne le prend pas en charge) ou une infrastructure de profil client, plutôt qu'une version de .NET prenant en charge la syntaxe d'initialisation.

676
Haney

Avec C # 6.0, vous pouvez créer un dictionnaire de la manière suivante:

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

Cela fonctionne même avec des types personnalisés.

178
Vikram Kumar

Vous pouvez initialiser un Dictionary (et d'autres collections) en ligne. Chaque membre est contenu avec des accolades:

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

Voir MSDN pour plus de détails.

32
Brendan

Supposons que nous ayons un dictionnaire comme celui-ci

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

Nous pouvons l'initialiser comme suit.

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

Les initialiseurs d'objet ont été introduits en C # 3.0, vérifiez la version de l'infrastructure que vous ciblez.

vue d'ensemble de C # 3.

8
Zbigniew