Здесь для наполнения списка List объектами применяется синтаксис инициализации в качестве сокращенной записи многократного вызова метода Add(). После вывода количества элементов в коллекции (и прохода по всем элементам) вызывается метод Insert(). Как видите, метод Insert() позволяет вставлять новый элемент в List по указанному индексу.

Наконец, обратите внимание на вызов метода ToArray(), который возвращает массив объектов Person, основанный на содержимом исходного списка List. Затем осуществляется проход по всем элементам данного массива с использованием синтаксиса индексатора массива. Вызов метода UseGenericList() в операторах верхнего уровня приводит к получению следующего вывода:

***** Fun with Generic Collections *****

Items in list: 4

Name: Homer Simpson, Age: 47

Name: Marge Simpson, Age: 45

Name: Lisa Simpson, Age: 9

Name: Bart Simpson, Age: 8

->Inserting new person.

Items in list: 5

First Names: Homer

First Names: Marge

First Names: Maggie

First Names: Lisa

First Names: Bart

В классе List определено множество дополнительных членов, представляющих интерес, поэтому за полным их описанием обращайтесь в документацию. Давайте рассмотрим еще несколько обобщенных коллекций, в частности Stack, Queue и SortedSet, что должно способствовать лучшему пониманию основных вариантов хранения данных в приложении.

<p id="AutBody_Root388">Работа с классом Stack<t></t></p>

Класс Stack представляет коллекцию элементов, которая обслуживает элементы в стиле "последний вошел — первый вышел" (LIFO). Как и можно было ожидать, в Stack определены члены Push() и Pop(), предназначенные для вставки и удаления элементов из стека. Приведенный ниже метод создает стек объектов Person:

static void UseGenericStack()

{

  Stack stackOfPeople = new();

  stackOfPeople.Push(new Person { FirstName = "Homer",

                                  LastName = "Simpson", Age = 47 });

  stackOfPeople.Push(new Person { FirstName = "Marge",

                                  LastName = "Simpson", Age = 45 });

  stackOfPeople.Push(new Person { FirstName = "Lisa",

                                  LastName = "Simpson", Age = 9 });

  // Просмотреть верхний элемент, вытолкнуть его и просмотреть снова..

  Console.WriteLine("First person is: {0}", stackOfPeople.Peek());

  Console.WriteLine("Popped off {0}", stackOfPeople.Pop());

  Console.WriteLine("\nFirst person is: {0}", stackOfPeople.Peek());

  Console.WriteLine("Popped off {0}", stackOfPeople.Pop());

  Console.WriteLine("\nFirst person item is: {0}", stackOfPeople.Peek());

  Console.WriteLine("Popped off {0}", stackOfPeople.Pop());

  try

  {

    Console.WriteLine("\nnFirst person is: {0}", stackOfPeople.Peek());

    Console.WriteLine("Popped off {0}", stackOfPeople.Pop());

  }

  catch (InvalidOperationException ex)

  {

    Console.WriteLine("\nError! {0}", ex.Message);  // Ошибка! Стек пуст

  }

}

В коде строится стек, который содержит информацию о трех лицах, добавленных в алфавитном порядке следования их имен: Homer, Marge и Lisa. Заглядывая (посредством метода Реек()) в стек, вы будете всегда видеть объект, находящийся на его вершине; следовательно, первый вызов Реек() возвращает третий объект Person. После серии вызовов Pop() и Peek() стек, в конце концов, опустошается, после чего дополнительные вызовы Реек() и Pop() приводят к генерации системного исключения. Вот как выглядит вывод:

***** Fun with Generic Collections *****

First person is: Name: Lisa Simpson, Age: 9

Popped off Name: Lisa Simpson, Age: 9

First person is: Name: Marge Simpson, Age: 45

Popped off Name: Marge Simpson, Age: 45

Перейти на страницу:

Похожие книги