字典初始值设定项与集合初始值设定项相比有什么好处

最近有很多关于C#6.0中新增function的讨论
最受关注的function之一是在C#6.0中使用Dictionary初始值设定项
但是,等等,我们一直在使用集合初始化器来初始化集合,并且可以在.NET 4.0和.NET 4.5(不知道旧版本)中很好地初始化Dictionary

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

那么在C#6.0中有什么新东西呢,他们在C#6.0中用什么字典初始化器来说话

虽然你可以使用集合初始化器初始化一个字典,但是这非常麻烦。 特别是对于那些应该是句法糖的东西。

字典初始值设定项更清晰:

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

更重要的是,这些初始化器不仅适用于字典,它们可以用于任何支持索引器的对象 ,例如List<T>

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

输出:

 1 5 3 

新的是这样创build一个字典

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

风格是<index> = <value>

已过时:string索引的成员语法 (如注释中所述)

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

采取从AC#6.0语言预览

要理解$运算符,请看看AreEqual函数调用。 请注意,对于builtInDataTypesvariables,即使“Dictionary”上没有“Boolean”成员,string成员对“$ Boolean”的调用也是如此。 这样的显式成员不是必需的,因为$操作符会调用字典上的索引成员,相当于调用buildInDataTypes [“Boolean”]。