Это инициализатор коллекции : http://msdn.microsoft.com/en-us/library/bb384062.aspx
Тип, инициализированный таким образом, должен реализовывать IEnumerable
и иметь метод Add
. Элементы в списке фигурных скобок передаются методу add; различные элементы в списке могут быть переданы различным Add
методам. Если имеется перегрузка Add
с более чем одним аргументом, вы помещаете несколько аргументов в список через запятую, заключенный в фигурные скобки.
Например:
class MyWeirdCollection : IEnumerable
{
public void Add(int i) { /*...*/ }
public void Add(string s) { /*...*/ }
public void Add(int i, string s) { /*...*/ }
//IEnumerable implementation omitted for brevity
}
Этот класс можно инициализировать следующим образом:
var weird = new MyWeirdCollection { 1, "Something", {5, "Something else"} };
Это компилируется во что-то вроде этого:
var temp = new MyWeirdCollection();
temp.Add(1);
temp.Add("Something");
temp.Add(5, "Something else");
var weird = temp;
В своем блоге (ссылка, размещенная Эриком Липпертом в комментариях), Мэдс Торгерсен выражает это кратко:
Список, который вы предоставляете, представляет собой не «список элементов для добавления», а «список наборов аргументов для методов Add». ... [W] мы делаем отдельное разрешение перегрузки для методов Add для каждой записи в списке.