对象初始化类似于List <>语法

kr8*_*r85 3 c# collections collection-initializer

如何定义类以便可以类似地初始化类List<T>:

List<int> list = new List<int>(){ //this part };
Run Code Online (Sandbox Code Playgroud)

例如,这种情况:

Class aClass = new Class(){ new Student(), new Student()//... };
Run Code Online (Sandbox Code Playgroud)

Ani*_*Ani 6

通常,为了直接允许collection-initializer语法Class,它将实现一个集合接口,例如ICollection<Student>或类似的(比如通过继承Collection<Student>).

但从技术上讲,它只需要实现非通用IEnumerable接口并具有兼容的Add方法.

所以这就足够了:

using System.Collections;

public class Class : IEnumerable
{
    // This method needn't implement any collection-interface method.
    public void Add(Student student) { ... }  

    IEnumerator IEnumerable.GetEnumerator() { ... }
}
Run Code Online (Sandbox Code Playgroud)

用法:

Class aClass = new Class { new Student(), new Student()  };
Run Code Online (Sandbox Code Playgroud)

正如您所料,编译器生成的代码类似于:

Class temp = new Class();
temp.Add(new Student());
temp.Add(new Student());
Class aClass = temp;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅语言规范的 "7.6.10.3集合初始值设定项"部分.