Eri*_*sch 4 c# arrays initialization list semantics
在C#3中,添加了初始化器.这是一个很棒的功能.然而,有一件事让我感到困惑.
初始化类时,通常必须指定要初始化的成员变量或属性.例如:
class C { public int i; }
public void blah() {
C c = new C() { i = 1 };
}
Run Code Online (Sandbox Code Playgroud)
我认为数组语义从一开始就在C#中.但他们的表现并不像那样.例如
public void foo()
{
int[] i = new int[] { 0, 1, 2, 3 };
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是有关数组语义的类呢?
public void bar()
{
List<int> li = new List<int>() { 0, 1, 3, 3 };
}
Run Code Online (Sandbox Code Playgroud)
列表只是一个类,与其他类似(虽然它是通用的).
我试图弄清楚编译器如何初始化List成员.这是在幕后做的某种魔术吗?或者这是否与在类上定义的索引器相关?
谢谢.
C#语言规范v3.0第7.5.10.3节集合初始化器:
应用集合初始值设定项的集合对象必须是实现的类型
System.Collections.IEnumerable或发生编译时错误.对于按顺序的每个指定元素,集合初始值设定项调用Add目标对象上的方法,并将元素初始值设定项的表达式列表作为参数列表,为每个调用应用正常的重载决策.因此,集合对象必须包含Add每个元素初始值设定项的适用方法.
要为您自己的集合启用此功能,您只需要一个Add具有适当参数的方法.编译器将Add使用您指定的参数将其转换为对方法的一系列调用.
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |