Quels sont les avantages des initialiseurs de dictionnaire par rapport aux initialiseurs de collection?

Récemment, on a beaucoup parlé de quoi de neuf dans C # 6.0
L’une des fonctionnalités les plus parlées est l’utilisation d’initialiseurs de 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 (ne connaissez pas l’ancienne version) comme

 Dictionary myDict = new Dictionary() { { 1,"Pankaj"}, { 2,"Pankaj"}, { 3,"Pankaj"} }; 

Alors, qu’y a-t-il de nouveau dans C # 6.0?

Bien que vous puissiez initialiser un dictionnaire avec des initialiseurs de collection, c’est assez encombrant. Surtout pour ce qui est censé être du sucre syntaxique.

Les initialiseurs de dictionnaires sont beaucoup plus propres:

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

Plus important encore, ces initialiseurs ne sont pas réservés aux dictionnaires, ils peuvent être utilisés pour tout object prenant en charge un indexeur , par exemple List :

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

Sortie:

 1 5 3 

Nouveau crée un dictionnaire de cette façon

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

avec le style de =

Obsolète: syntaxe de membre indexé de chaîne (comme indiqué dans les commentaires)

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

Tiré de AC # 6.0 Language Preview

Pour comprendre l’opérateur $, consultez 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 requirejs car l’opérateur $ appelle le membre indexé sur le dictionnaire, ce qui équivaut à appeler buildInDataTypes [“Boolean”].