Инициализаторы коллекций в языке C#
В Java я могу создать список и сразу же заполнить его с помощью статического инициализатора. Что-то вроде этого:
List <String> list = new ArrayList<String>()
{{
Add("a");
Add("b");
Add("c");
}}
Что удобно, потому что я могу создать список на лету и передать его в качестве аргумента в функцию. Что-то вроде этого:
printList(new ArrayList<String>()
{{
Add("a");
Add("b");
Add("c");
}});
Я новичок в C# и пытаюсь понять, как это сделать, но ничего не получается. Возможно ли это в C#? И если да, то как это сделать?
3 ответа:
Можно использовать инициализатор коллекции:
new List<string> { "a", "b", "c" }
Это компилируется в последовательность вызовов метода
Add
.
Если методAdd
принимает несколько аргументов (например, словарь), вам нужно будет обернуть каждый вызов в отдельную пару фигурных скобок:new Dictionary<string, Exception> { { "a", new InvalidProgramException() }, { "b", null }, { "c", new BadImageFormatException() } }
Так как
C# 3.0
Вы можете сделать это также:List <String> list = new List<String> { "a", "b", "c" };
MSDN, инициализаторы коллекций
Инициализаторы коллекции позволяют указать один или несколько элементов intializers при инициализации класса коллекции, реализующего интерфейс IEnumerable. Инициализаторы элементов могут быть простыми значениями, например: выражение или инициализатор объекта. С помощью инициализатора коллекции вам не нужно указывать несколько вызовов метода Add объекта класс В исходном коде; компилятор добавляет вызовы.
EDIT: ответ на комментарий относительно словаря
IDictionary<string, string> map = new Dictionary<string, string> { { "Key0", "Value0" }, { "Key1", "Value1" } };
Да, это описано на MSDN здесь