Это вызов инициализатора объекта и инициализатора коллекции , и он позволяет вам устанавливать свойства в блоке { .. }
при вызове конструктора.Внутри блока вы используете Setters = { ... }
, который является инициализатором коллекции - он позволяет вам указывать элементы коллекции (здесь вам не нужно создавать новый экземпляр коллекции - он просто добавляет элементы в фигурных скобках).).Для получения дополнительной информации см. Эту страницу MSDN .
В общем, синтаксис инициализаторов объектов имеет несколько параметров:
// Without explicitly mentioning parameter-less constructor:
new A { Prop1 = ..., Prop2 = ... }
// Specifying constructor arguments:
new A(...) { Prop1 = ..., Prop2 = ... }
Синтаксисдля инициализаторы коллекции выглядит следующим образом:
// Creating new instance
new List<int> { 1, 2, 3 }
// Adding to existing instance inside object initializer:
SomeList = { 1, 2, 3 }
Стоит отметить, что это тесно связано с анонимными типами (где вы не даете имя типа - компилятор генерирует некоторые скрытыевведите и вы можете работать с ним, используя var
):
// Create anonymous type with some properties
new { Prop1 = ..., Prop2 = ... }
Все эти функции являются новыми в C # 3.0.Смотрите также этот SO post , который объясняет некоторые хитрые аспекты инициализаторов коллекций (в том стиле, в котором вы их используете).