Книга: C# 4.0: полное руководство

Инициализаторы коллекций

Инициализаторы коллекций

В С# имеется специальное средство, называемое инициализатором коллекции и упрощающее инициализацию некоторых коллекций. Вместо того чтобы явно вызывать метод Add(), при создании коллекции можно указать список инициализаторов. После этого компилятор организует автоматические вызовы метода Add(), используя значения из этого списка. Синтаксис в данном случае ничем не отличается от инициализации массива. Обратимся к следующему примеру, в котором создается коллекция типа List<char>, инициализируемая символами С, А, Е, В, D и F.

List<char> lst = new List<char>() { 'С', 'А', 'Е', 'В', 'D', 'F' };

После выполнения этого оператора значение свойства lst.Count будет равно 6, поскольку именно таково число инициализаторов. А после выполнения следующего цикла foreach:

foreach(ch in lst)
  Console.Write(ch + " ");

получится такой результат:

С A E В D F

Для инициализации коллекции типа LinkedList<TKey, TValue>, в которой хранятся пары "ключ-значение", инициализаторы приходится предоставлять парами, как показано ниже.

SortedListcint, string> lst =
  new SortedList<int, string>()
       { {1, "один"}, {2, "два" }, {3, "три"} };

Компилятор передаст каждую группу значений в качестве аргументов методу Add(). Следовательно, первая пара инициализаторов преобразуется компилятором в вызов Add(1, "один").

Компилятор вызывает метод Add() автоматически для ввода инициализаторов в коллекцию, и поэтому инициализаторы коллекций можно использовать только в коллекциях, поддерживающих открытую реализацию метода Add(). Это означает, что инициализаторы коллекций нельзя использовать в коллекциях типа Stack, Stack<T>, Queue или Queue<T>, поскольку в них метод Add() не поддерживается. Их нельзя применять также в тех коллекциях типа LinkedList<T>, где метод Add() предоставляется как результат явной реализации соответствующего интерфейса.

Оглавление книги


Генерация: 1.490. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз