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)
通常,为了直接允许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集合初始值设定项"部分.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |