如何使用集合初始值设定项初始化字典(C# 编程指南)

Dictionary<TKey,TValue> 包含键/值对集合。 其 Add 方法采用两个参数,一个用于键,一个用于值。 若要初始化 Dictionary<TKey,TValue> 或其 Add 方法采用多个参数的任何集合,一种方法是将每组参数括在大括号中,如下面的示例中所示。 另一种方法是使用索引初始值设定项,如下面的示例所示。

注意

我们以具有重复键的情况来举例说明初始化集合的这两种方法之间的主要区别:

{ 111, new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 } },
{ 111, new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } }, 

Add 方法将引发 ArgumentException'An item with the same key has already been added. Key: 111',而示例的第二部分(公共读/写索引器方法)将使用相同的键静默覆盖已存在的条目。

示例

在下面的代码示例中,使用类型 StudentName 的实例初始化 Dictionary<TKey,TValue>。 第一个初始化使用具有两个参数的 Add 方法。 编译器为每对 int 键和 StudentName 值生成对 Add 的调用。 第二个初始化使用 Dictionary 类的公共读取/写入索引器方法:

public class HowToDictionaryInitializer
{
    class StudentName
    {
        public string? FirstName { get; set; }
        public string? LastName { get; set; }
        public int ID { get; set; }
    }

    public static void Main()
    {
        var students = new Dictionary<int, StudentName>()
        {
            { 111, new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 } },
            { 112, new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } },
            { 113, new StudentName { FirstName="Andy", LastName="Ruth", ID=198 } }
        };

        foreach(var index in Enumerable.Range(111, 3))
        {
            Console.WriteLine($"Student {index} is {students[index].FirstName} {students[index].LastName}");
        }
        Console.WriteLine();		

        var students2 = new Dictionary<int, StudentName>()
        {
            [111] = new StudentName { FirstName="Sachin", LastName="Karnik", ID=211 },
            [112] = new StudentName { FirstName="Dina", LastName="Salimzianova", ID=317 } ,
            [113] = new StudentName { FirstName="Andy", LastName="Ruth", ID=198 }
        };

        foreach (var index in Enumerable.Range(111, 3))
        {
            Console.WriteLine($"Student {index} is {students2[index].FirstName} {students2[index].LastName}");
        }
    }
}

请注意,在第一个声明中,集合中的每个元素有两对大括号。 最内层的大括号中括住了 StudentName 的对象初始值设定项,最外层的大括号则括住了要添加到 studentsDictionary<TKey,TValue> 的键/值对的初始值设定项。 最后,字典的整个集合初始值设定项被括在大括号中。 在第二个初始化中,左侧赋值是键,右侧是将对象初始值设定项用于 StudentName 的值。

另请参阅