Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

static void UseGenericList

{

// Создать список объектов Person и заполнить его с помощью

// синтаксиса инициализации объектов и коллекции.

List<Person> people = new List<Person>

{

new Person {FirstName= "Homer", LastName="Simpson", Age=47},

new Person {FirstName= "Marge", LastName="Simpson", Age=45},

new Person {FirstName= "Lisa", LastName="Simpson", Age=9},

new Person {FirstName= "Bart", LastName="Simpson", Age=8}

};

//
Вывести количество элементов в списке.

Console.WriteLine("Items in list: {0}", people.Count);

// Выполнить перечисление по списку.

foreach (Person p in people)

{

Console.WriteLine(p);

}

// Вставить новый объект Person.

Console.WriteLine("\n->Inserting new person.");

people.Insert(2, new Person { FirstName = "Maggie",

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

Console.WriteLine("Items in list: {0}", people.Count);

// Скопировать данные в новый массив.

Person[] arrayOfPeople = people.ToArray;

foreach (Person p in arrayOfPeople) // Вывести имена

{

Console.WriteLine("First Names: {0}", p.FirstName);

}

}

Здесь для наполнения списка

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

Наконец, обратите внимание на вызов метода

ToArray
, который возвращает массив объектов
Person
, основанный на содержимом исходного списка
List<T>
. Затем осуществляется проход по всем элементам данного массива с использованием синтаксиса индексатора массива. Вызов метода
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<T>
определено множество дополнительных членов, представляющих интерес, поэтому за полным их описанием обращайтесь в документацию. Давайте рассмотрим еще несколько обобщенных коллекций, в частности
Stack<T>
,
Queue<T>
и
SortedSet<T>
, что должно способствовать лучшему пониманию основных вариантов хранения данных в приложении.

Работа с классом Stack<T>

Класс

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

static void UseGenericStack

{

Stack<Person> 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
приводят к генерации системного исключения. Вот как выглядит вывод:

Поделиться с друзьями: