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

ЖАНРЫ

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

foreach (Person p in setOfPeople)

{

Console.WriteLine(p);

}

Console.WriteLine;

// Добавить еще несколько объектов Person с разными значениями возраста.

setOfPeople.Add(new Person { FirstName = "Saku", LastName = "Jones", Age = 1 });

setOfPeople.Add(new Person { FirstName = "Mikko", LastName = "Jones", Age = 32 });

//
Элементы по-прежнему отсортированы по возрасту.

foreach (Person p in setOfPeople)

{

Console.WriteLine(p);

}

}

Запустив приложение, легко заметить, что список объектов будет всегда упорядочен на основе значения свойства

Age
независимо от порядка вставки и удаления объектов:

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

Name: Bart Simpson, Age: 8

Name: Lisa Simpson, Age: 9

Name: Marge Simpson, Age: 45

Name: Homer Simpson, Age: 47

Name: Saku Jones, Age: 1

Name: Bart Simpson, Age: 8

Name: Lisa Simpson, Age: 9

Name: Mikko Jones, Age: 32

Name: Marge Simpson, Age: 45

Name: Homer Simpson, Age: 47

Работа с классом Dictionary<TKey,TValue>

Еще одной удобной обобщенной коллекцией является класс

Dictionary<TKey,TValue>
, позволяющий хранить любое количество объектов, на которые можно ссылаться через уникальный ключ. Таким образом, вместо получения элемента из
List<T>
с использованием числового идентификатора (например, "извлечь второй объект") можно применять уникальный строковый ключ (скажем, "предоставить объект с ключом
Homer
").

Как и другие классы коллекций, наполнять

Dictionary<TKey,TValue>
можно путем вызова обобщенного метода
Add
вручную. Тем не менее, заполнять
Dictionary<TKey,TValue>
допускается также с использованием синтаксиса инициализации коллекций. Имейте в виду, что при наполнении данного объекта коллекции ключи должны быть уникальными. Если вы по ошибке укажете один и тот же ключ несколько раз, то получите исключение времени выполнения.

Взгляните на следующий метод, который наполняет

Dictionary<K,V>
разнообразными объектами. Обратите внимание, что при создании объекта
Dictionary<TKey,TValue>
в качестве аргументов конструктора передаются тип ключа (
ТКеу
) и тип внутренних объектов (
TValue
). В этом примере для ключа указывается тип данных
string
, а для значения — тип
Person
. Кроме того, имейте в виду, что синтаксис инициализации объектов можно сочетать с синтаксисом инициализации коллекций.

private static void UseDictionary

{

// Наполнить с помощью метода Add

Dictionary<string, Person> peopleA = new Dictionary<string, Person>;

peopleA.Add("Homer", new Person { FirstName = "Homer",

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

peopleA.Add("Marge", new Person { FirstName = "Marge",

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

peopleA.Add("Lisa", new Person { FirstName = "Lisa",

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

//
Получить элемент с ключом Homer.

Person homer = peopleA["Homer"];

Console.WriteLine(homer);

// Наполнить с помощью синтаксиса инициализации.

Dictionary<string, Person> peopleB = new Dictionary<string, Person>

{

{ "Homer", new Person { FirstName = "Homer",

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

{ "Marge", new Person { FirstName = "Marge",

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

{ "Lisa", new Person { FirstName = "Lisa",

LastName = "Simpson", Age = 9 } }

};

// Получить элемент с ключом Lisa.

Person lisa = peopleB["Lisa"];

Console.WriteLine(lisa);

}

Наполнять

Dictionary<TKey,TValue>
также возможно с применением связанного синтаксиса инициализации, который является специфичным для контейнера данного типа (вполне ожидаемо называемый инициализацией словарей). Подобно синтаксису, который использовался при наполнении объекта
personB
в предыдущем примере, для объекта коллекции определяется область инициализации; однако можно также применять индексатор, чтобы указать ключ, и присвоить ему новый объект:

// Наполнить с помощью синтаксиса инициализации словарей.

Dictionary<string, Person> peopleC = new Dictionary<string, Person>

{

["Homer"] = new Person { FirstName = "Homer",

LastName = "Simpson", Age = 47 },

["Marge"] = new Person { FirstName = "Marge",

LastName = "Simpson", Age = 45 },

["Lisa"] = new Person { FirstName = "Lisa",

LastName = "Simpson", Age = 9 }

};

Пространство имен System.Collections.ObjectModel

Теперь, когда вы понимаете, как работать с основными обобщенными классами, можно кратко рассмотреть дополнительное пространство имен, связанное с коллекциями —

System.Collections.ObjectModel
. Это относительно небольшое пространство имен, содержащее совсем мало классов. В табл. 10.7 документированы два класса, о которых вы обязательно должны быть осведомлены.

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