C#面试题更新 2026-08-05

请描述 C# 中对象初始器和集合初始器的语法结构,并举例说明集合初始器的用法。

技术原理C#

考察说明

考查对 C# 初始器语法的掌握,尤其是集合初始器的实际使用。

回答思路

  1. 【回答框架 1】对象初始器允许在创建对象时直接为属性或字段赋值,语法为在构造表达式后加花括号,内部分别用逗号分隔的成员初始化列表,每个成员形如'属性名 = 值'。例如:var p = new Person { Name = "Alice", Age = 30 }; 其中隐式调用了无参构造函数。
  2. 【回答框架 2】集合初始器用于在初始化集合类型时直接添加元素,语法为在集合表达式后加花括号,内部列出元素,元素间用逗号分隔。它要求集合类型实现 IEnumerable 且具有可用的 Add 方法,编译器会依次调用 Add 方法添加元素。例如:var list = new List<int> { 1, 2, 3 }; 等价于先创建 List 实例,再调用三次 Add。
  3. 【回答框架 3】集合初始器也支持初始化字典或自定义集合,可使用索引初始器指定键值,如 var dict = new Dictionary<string, int> { { "one", 1 }, { "two", 2 } }; 或者使用索引语法 dict["key"] = value。编译器会根据元素类型调用匹配的 Add 重载或索引器。
  4. 【回答框架 4】初始器语法要求右侧表达式类型必须与初始化目标兼容,且集合类型必须与 Add 方法的参数相符。若集合类没有合适的 Add 方法,则编译器会报错。此外,对象初始器中的赋值顺序与书写顺序一致,但一般不依赖此顺序。
  5. 【关键点 1】对象初始器语法:在构造表达式后加花括号,内部使用成员初始化列表。
  6. 【关键点 2】集合初始器要求实现 IEnumerable 并具有 Add 方法。
  7. 【关键点 3】集合初始器可应用于 List、Dictionary 等,支持索引初始器。
  8. 【关键点 4】编译器会将集合初始器转换为对 Add 方法的依次调用。
  9. 【易错点 1】集合初始器要求集合类型必须实现 IEnumerable 且具有合适的 Add 方法,否则无法使用。
  10. 【易错点 2】对象初始器只能用于可访问的属性和字段,且赋值顺序与书写顺序一致,但不应依赖顺序。
  11. 【易错点 3】使用索引初始器时,字典的键和值类型必须与索引器参数匹配,否则编译失败。