web-dev-qa-db-fra.com

Quels avantages les initialiseurs de dictionnaire ajoutent-ils aux initialiseurs de collection?

Dans un passé récent, on a beaucoup parlé des nouveautés de C # 6.0
L'une des fonctionnalités dont on parle le plus est l'utilisation des initialiseurs Dictionary dans C # 6.0
Mais attendez, nous avons utilisé des initialiseurs de collection pour initialiser les collections et pouvons très bien initialiser un Dictionary également dans .NET 4.0 et .NET 4.5 (Je ne sais pas pour l'ancienne version)

Dictionary<int, string> myDict = new Dictionary<int, string>() {
    { 1,"Pankaj"},
    { 2,"Pankaj"},
    { 3,"Pankaj"}
};

Alors, qu'est-ce qu'il y a de nouveau dans C # 6.0, de quel initialiseur de dictionnaire ils parlent dans C # 6.0

47
Pankaj

Bien que vous puissiez initialiser un dictionnaire avec des initialiseurs de collection, c'est assez lourd. Surtout pour quelque chose qui est censé être du sucre syntaxique.

Les initialiseurs de dictionnaire sont beaucoup plus propres:

var myDict = new Dictionary<int, string>
{
    [1] = "Pankaj",
    [2] = "Pankaj",
    [3] = "Pankaj"
};

Plus important encore, ces initialiseurs ne sont pas uniquement destinés aux dictionnaires, ils peuvent être utilisés pour tout objet prenant en charge un indexeur, par exemple List<T>:

var array = new[] { 1, 2, 3 };
var list = new List<int>(array) { [1] = 5 };
foreach (var item in list)
{
    Console.WriteLine(item);
}

Sortie:

1
5
3
75
i3arnon

Nouveau est de créer un dictionnaire de cette façon

Dictionary<int, string> myDict = new Dictionary<int, string>() {
    [1] = "Pankaj",
    [2] = "Pankaj",
    [3] = "Pankaj"
};

avec le style de <index> = <value>

Obsolète: syntaxe des membres indexés par chaîne (comme indiqué dans les commentaires)

Dictionary<int, string> myDict = new Dictionary<int, string>() {
        $1 = "Pankaj",
        $2 = "Pankaj",
        $3 = "Pankaj"
    };

Extrait de A C # 6.0 Language Preview

Pour comprendre l'opérateur $, jetez un œil à l'appel de fonction AreEqual. Notez l'invocation du membre Dictionary de "$ Boolean" sur la variable builtInDataTypes, même s'il n'y a pas de membre "Boolean" dans Dictionary. Un tel membre explicite n'est pas requis car l'opérateur $ appelle le membre indexé dans le dictionnaire, l'équivalent d'appeler buildInDataTypes ["Boolean"].

0
Jehof