Ответ 1
Использование фигурных скобок { }
называется инициализатором коллекции. Для типов, реализующих IEnumerable
, метод Add
будет вызываться нормально, от вашего имени:
List<string> myList2 = new List<string>() { "one", "two", "three" };
Разрешены пустые инициализаторы коллекции:
List<string> myList2 = new List<string>() { };
И при реализации инициализатора вы можете опустить скобку ()
для конструктора по умолчанию:
List<string> myList2 = new List<string> { };
Вы можете сделать что-то подобное для свойств класса, но затем оно называется инициализатором объекта.
var person = new Person
{
Name = "Alice",
Age = 25
};
Их можно комбинировать:
var people = new List<Person>
{
new Person
{
Name = "Alice",
Age = 25
},
new Person
{
Name = "Bob"
}
};
Эта языковая функция, введенная в С# 3.0, также поддерживает инициализацию анонимных типов, что особенно полезно в выражениях запроса LINQ:
var person = new { Name = "Alice" };
Они также работают с массивами, но вы можете дополнительно опустить тип, который выводится из первого элемента:
var myArray = new [] { "one", "two", "three" };
И инициализация многомерных массивов происходит примерно так:
var myArray = new string [,] { { "a1", "b1" }, { "a2", "b2" }, ... };