Обычно, чтобы разрешить синтаксис 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() { ... }
}
Использование:
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 Инициализаторы коллекций» спецификации языка .