我怎样才能定义类,以便它可以类似地初始化List<T>
:
List<int> list = new List<int>(){ //this part };
例如,这种情况:
Class aClass = new Class(){ new Student(), new Student()//... };
我怎样才能定义类,以便它可以类似地初始化List<T>
:
List<int> list = new List<int>(){ //this part };
例如,这种情况:
Class aClass = new Class(){ new Student(), new Student()//... };
通常,为了允许直接在 上的集合初始化器语法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() { ... }
}
用法:
Class aClass = new Class { new Student(), new Student() };
如您所料,编译器生成的代码将类似于:
Class temp = new Class();
temp.Add(new Student());
temp.Add(new Student());
Class aClass = temp;
有关详细信息,请参阅语言规范的“7.6.10.3 集合初始值设定项”部分。
如果您定义MyClass
为一组学生:
public class MyClass : List<Student>
{
}
var aClass = new MyClass{ new Student(), new Student()//... }
或者,如果您的课程包含以下公共集合Student
:
public class MyClass
{
public List<Student> Students { get; set;}
}
var aClass = new MyClass{ Students = new List<Student>
{ new Student(), new Student()//... }}
您选择哪一个实际上取决于您如何为类建模。
我没有看到有人建议实现泛型,所以就在这里。
class Class<T> : IEnumerable
{
private List<T> list;
public Class()
{
list = new List<T>();
}
public void Add(T d)
{
list.Add(d);
}
public IEnumerator GetEnumerator()
{
return list.GetEnumerator();
}
}
并使用:
Class<int> s = new Class<int>() {1,2,3,4};