集合类(比如ArrayList,List<T>)的初始化跟正常类型比起来,可以多出来一个花括号包起来的小尾巴,称为“集合初始化器”,举个栗子:
List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
下面介绍如何在自定义类里也实现这个功能。该类需要两个条件:
再次举栗子:1. 继承接口 IEnumerable
2. 实现公共方法 Add(...)
class Roster : IEnumerable
{
public List<string> names = new List<string>();
public IEnumerator GetEnumerator()
{
return null;
}
public void Add(string name)
{
names.Add(name);
}
}
...
Roster roster = new Roster() { "Tom", "Jerry" };
等价于
Roster roster = new Roster();
roster.Add("Tom");
roster.Add("Jerry");
这个例子里的 GetEnumerator() 方法是空的,不过并不影响我们正常使用集合初始化器。