J'ai le code C# suivant qui initialise un nouveau dictionnaire avec des clés int
et des valeurs List
:
var dictionnaire =
new Dictionary>
{
[1] = new List { "str1", "str2", "str3" },
[2] = new List { "str4", "str5", "str6" }
};
Si je décompile un exécutable fait à partir de cet extrait en C#, la partie correspondante ressemble à ceci :
Dictionary> expr_06 = new Dictionary>();
expr_06[1] = new List
{
"str1",
"str2",
"str3"
};
expr_06[2] = new List
{
"str4",
"str5",
"str6"
};
Tout semble normal et fonctionne correctement ici.
Mais lorsque j'ai le code suivant :
var dictionnaire2 =
new Dictionary>
{
[1] = { "str1", "str2", "str3" },
[2] = { "str4", "str5", "str6" }
};
ce qui semble encore être un code normal et compile avec succès, mais pendant l'exécution je reçois l'exception suivante :
System.Collections.Generic.KeyNotFoundException: 'La clé spécifiée est introuvable dans le dictionnaire.'
Quand je regarde le code décompilé du deuxième exemple, je peux voir qu'il est différent du premier :
Dictionary> expr_6E = new Dictionary>();
expr_6E[1].Add("str1");
expr_6E[1].Add("str2");
expr_6E[1].Add("str3");
expr_6E[2].Add("str4");
expr_6E[2].Add("str5");
expr_6E[2].Add("str6");
Et bien sûr cela explique l'exception.
Maintenant mes questions sont les suivantes :
-
Ce comportement est-il attendu et est-il documenté quelque part ?
-
Pourquoi la syntaxe ci-dessus est autorisée mais la syntaxe suivante ne l'est pas ?
List liste = { "test" };
-
Pourquoi la syntaxe suivante n'est-elle pas autorisée alors ?
var dict = new Dictionary { [1] = { "test1", "test2", "test3" }, [2] = { "test4", "test5", "test6" } };
Questions similaires mais différentes :