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

  SortedSet setOfPeople = new SortedSet(new SortPeopleByAge())

  {

    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}

  };

  // Обратите внимание, что элементы отсортированы по возрасту.

  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

<p id="AutBody_Root391">Работа с классом Dictionary<tkey,tvalue></tkey,tvalue></p>

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

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

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

private static void UseDictionary()

{

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

    Dictionary peopleA = new Dictionary();

    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 peopleB = new Dictionary()

    {

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

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

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