C 6 索引初始化器

从 C#6 开始,可以通过在方括号中指定要分配的索引,然后是等号,后跟要分配的值来初始化带有索引器的集合。

字典初始化

使用 Dictionary 的语法示例:

var dict = new Dictionary<string, int>
{
    ["key1"] = 1,
    ["key2"] = 50
};

这相当于:

var dict = new Dictionary<string, int>();
dict["key1"] = 1;
dict["key2"] = 50

在 C#6 之前执行此操作的集合初始化程序语法是:

var dict = new Dictionary<string, int>
{
    { "key1", 1 },
    { "key2", 50 }
};

这对应于:

var dict = new Dictionary<string, int>();
dict.Add("key1", 1);
dict.Add("key2", 50);

因此,功能上存在显着差异,因为新语法使用初始化对象的索引器来分配值而不是使用其 Add() 方法。这意味着新语法只需要一个公开可用的索引器,并且适用于任何具有一个索引器的对象。

public class IndexableClass
{
    public int this[int index]
    {
        set 
        { 
            Console.WriteLine("{0} was assigned to index {1}", value, index);
        }
    }
}

var foo = new IndexableClass
{
    [0] = 10,
    [1] = 20
}

这将输出:

10 was assigned to index 0
20 was assigned to index 1