Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 204 205 206 207 208 209 210 211 212 ... 642

}

Запустив приложение, легко заметить, что список объектов будет всегда упорядочен на основе значения свойства 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&lt;TKey,TValue&gt;, позволяющий хранить любое количество объектов, на которые можно ссылаться через уникальный ключ. Таким образом, вместо получения элемента из List&lt;T&gt; с использованием числового идентификатора (например, "извлечь второй объект") можно применять уникальный строковый ключ (скажем, "предоставить объект с ключом Homer").

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

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

private static void UseDictionary()

{

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

    Dictionary&lt;string, Person&gt; peopleA = new Dictionary&lt;string, Person&gt;();

    peopleA.Add(&quot;Homer&quot;, new Person { FirstName = &quot;Homer&quot;,

                                      LastName = &quot;Simpson&quot;, Age = 47 });

    peopleA.Add(&quot;Marge&quot;, new Person { FirstName = &quot;Marge&quot;,

                                      LastName = &quot;Simpson&quot;, Age = 45 });

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

    peopleA.Add(&quot;Lisa&quot;, new Person { FirstName = &quot;Lisa&quot;,

                                     LastName = &quot;Simpson&quot;, Age = 9 });

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

    Person homer = peopleA[&quot;Homer&quot;];

    Console.WriteLine(homer);

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

    Dictionary&lt;string, Person&gt; peopleB = new Dictionary&lt;string, Person&gt;()

    {

        { &quot;Homer&quot;, new Person { FirstName = &quot;Homer&quot;,

                                LastName = &quot;Simpson&quot;, Age = 47 } },

        { &quot;Marge&quot;, new Person { FirstName = &quot;Marge&quot;,

                                LastName = &quot;Simpson&quot;, Age = 45 } },

        { &quot;Lisa&quot;, new Person { FirstName = &quot;Lisa&quot;,

                               LastName = &quot;Simpson&quot;, Age = 9 } }

    };

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

    Person lisa = peopleB[&quot;Lisa&quot;];

    Console.WriteLine(lisa);

}

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

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

Dictionary&lt;string, Person&gt; peopleC = new Dictionary&lt;string, Person&gt;()

{

    [&quot;Homer&quot;] = new Person { FirstName = &quot;Homer&quot;,

                             LastName = &quot;Simpson&quot;, Age = 47 },

    [&quot;Marge&quot;] = new Person { FirstName = &quot;Marge&quot;,

                             LastName = &quot;Simpson&quot;, Age = 45 },

    [&quot;Lisa&quot;] = new Person { FirstName = &quot;Lisa&quot;,

                            LastName = &quot;Simpson&quot;, Age = 9 }

};

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

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

1 ... 204 205 206 207 208 209 210 211 212 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий