System.Array不支持Add(),那么集合初始化程序如何工作?

时间:2016-01-28 09:35:47

标签: c# arrays collection-initializer

在C#中,你可以像这样初始化一个数组:

var example = new int[] { 1, 4, 3 };

引用Custom Collection Initializers

  

应用集合初始值设定项的集合对象必须是实现System.Collections.IEnumerable的类型,否则会发生编译时错误。对于按顺序的每个指定元素,集合初始值设定项在目标对象上调用 Add方法,并将元素初始值设定项的表达式列表作为参数列表,为每个调用应用正常的重载决策。因此,集合对象必须包含每个元素初始值设定项的适用Add方法。

但是你不能添加到System.Array,必须为每个添加的项创建一个新的更大的数组,这对性能不利。那么在数组上使用集合初始值设定项时C#如何工作?我想知道我是否可以编写一个带有支持集合初始化程序的内部数组的类。

2 个答案:

答案 0 :(得分:5)

引用您提供的与自定义集合相关的内容。

但是数组不是自定义集合,它是内置类型,并且有自己的初始化语法规范here。特别是,该规范不需要任何Add方法。

答案 1 :(得分:2)

Array不是自定义集合。这是一个阵列。 数组初始值设定项的日期前集合初始值设定项,以及语法的灵感来源。