初始化程序语法与无参数构造函数语法

时间:2018-12-14 13:38:40

标签: c# list initializer

实例化一个新的空“列表”样式对象有两种替代样式:

var list = new SomeListType<int>();

var list = new SomeListType<int> { };

第一个依赖于允许基本构造函数设置对象,第二个似乎也隐式依赖于构造函数,但还指定了一个空的初始化列表。

(初始化器列表有意留为空白,例如在某些情况下看起来更可读或更清晰。)

这两种方法之间在实用性或功能性方面是否有所不同?

(请注意-SomeListType可以是可以这样构造的任何东西-例如标准List<T>或某些自定义类。仅以int为例)。

2 个答案:

答案 0 :(得分:2)

对于两个选项,即使生成的IL代码也将相同:

newobj instance void class Namespace.SomeListType`1<int32>::.ctor() 

所以根本没有功能上的差异。

答案 1 :(得分:1)

您编写的两行将编译相同。区别在于,在第二个版本中,您可以通过在花括号中添加项目来初始化列表(前提是您的列表实现了ICollection<T>接口或提供了相应的Add方法:

var list = new SomeListType<int> { 1, 2, 3, 4 };