Рассмотрим, как раньше мы создавали объект:
class Contact
{
public string Name { get; set; }
public int YearofBirth { get; set; }
}
Contact c1 = new Contact();
c1.Name = "John";
c1.YearofBirth = 1980;
Если мы напишем для класса конструктор с двумя параметрами, то инициализация станет короче:
Contact c1 = new Contact("John", 1980);
Минус очевиден - для каждого набора параметров надо писать свой конструктор (значения по умолчанию для параметров появились лишь в C# 4.0). Но теперь нам доступен другой способ инициализации:
Contact c1 = new Contact { Name = "John", YearofBirth = 1980 };
Присваивания свойств идут через запятую в фигурных скобках, внутри скобок ";" не ставится.
Предположим, что конструктор обязательно должен принимать Name. Тогда можно инициализировать объект следующим образом:
Contact c1 = new Contact("Wei-Meng Lee") { YearofBirth=1980 };
Теперь мы имеем эффективное средство для инициализации свойств для ленивых, т.е. для нас, программистов.
Похожим образом теперь можно создавать коллекции - это называется Collection Initializers:
раньше
List Contacts = new List ();
Contacts.Add(new Contact { Name = "John", YearofBirth = 1980 });
Contacts.Add(new Contact { Name = "Mary", YearofBirth = 1986 });
Contacts.Add(new Contact { Name = "Richard",YearofBirth=1948 });
теперь
List Contacts = new List() {
new Contact { Name = "John", YearofBirth = 1980 },
new Contact { Name = "Mary", YearofBirth = 1986 },
new Contact { Name = "Richard", YearofBirth = 1948 }
};