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