Comment insérer des valeurs dans le dictionnaire C # lors de l'instanciation?

150

Est-ce que quelqu'un sait s'il existe un moyen d'insérer des valeurs dans un dictionnaire C # lorsque je le crée? Je peux, mais je ne veux pas, faire dict.Add(int, "string")pour chaque élément s'il y a quelque chose de plus efficace comme:

Dictionary<int, string>(){(0, "string"),(1,"string2"),(2,"string3")};
kd7iwp
la source

Réponses:

200

Il y a une page entière sur la façon de faire cela ici:

http://msdn.microsoft.com/en-us/library/bb531208.aspx

Exemple:

Dans l'exemple de code suivant, a Dictionary<TKey, TValue>est initialisé avec des instances de type StudentName:

var 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}}
};
Daniel Earwicker
la source
3
Cela ne fonctionne que sur le compilateur .NET 3.5 ... gardez cela à l'esprit.
Adrian Godong
@ kd7iwp - pas de problème, une partie de la fonction de ce site est que des termes de recherche alternatifs puissent être dirigés vers quelque chose d'utile.
Daniel Earwicker
Ouais, c'est à peu près acquis avec Microsoft. Ils ont été assez attachés à la rétrocompatibilité au fil des ans.
PRMan
46
Dictionary<int, string> dictionary = new Dictionary<int, string> { 
   { 0, "string" }, 
   { 1, "string2" }, 
   { 2, "string3" } };
Timothy Carter
la source
13

Vous y étiez presque:

var dict = new Dictionary<int, string>()
{ {0, "string"}, {1,"string2"},{2,"string3"}};
Henk Holterman
la source
10

Vous pouvez également utiliser des expressions Lambda pour insérer des paires de valeurs clés à partir de tout autre objet IEnumerable. La clé et la valeur peuvent être de n'importe quel type.

Dictionary<int, string> newDictionary = 
                 SomeList.ToDictionary(k => k.ID, v => v.Name);

Je trouve cela beaucoup plus simple puisque vous utilisez les objets IEnumerable partout dans .NET

J'espère que cela pourra aider!!!

Tad.

matendie
la source
7

Vous pouvez instancier un dictionnaire et y ajouter des éléments comme ceci:

var dictionary = new Dictionary<int, string>
    {
        {0, "string"},
        {1, "string2"},
        {2, "string3"}
    };
Joseph
la source
7

Juste pour que vous sachiez à partir de C # 6, vous pouvez maintenant l'initialiser comme suit

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

Beaucoup plus propre :)

russelrillema
la source
-1

J'espère que cela fonctionnera parfaitement.

Dictionary<string, double> D =new Dictionary<string, double>(); D.Add("String", 17.00);


la source
Salut, bienvenue à SO! La personne qui a posé cette question à l'origine a spécifiquement déclaré qu'elle ne voulait pas utiliser la .Add(int, "string")méthode d'ajout de valeurs à un dictionnaire. Désolé mais cela ne répond pas à la question.
Kezz101
-2

Ce n'est généralement pas recommandé, mais en période de crise incertaine, vous pouvez utiliser

Dictionary<string, object> jsonMock = new Dictionary<string, object>() { { "object a", objA }, { "object b", objB } };

// example of unserializing
ClassForObjectA anotherObjA = null;
if(jsonMock.Contains("object a")) {
    anotherObjA = (ClassForObjA)jsonMock["object a"];
}
Jacksonkr
la source