Язык программирования C#9 и платформа .NET5
Часть 208 из 642 Информация о книге
}Запустив приложение, легко заметить, что список объектов будет всегда упорядочен на основе значения свойства
независимо от порядка вставки и удаления объектов:Age***** Fun with Generic Collections *****Name: Bart Simpson, Age: 8Name: Lisa Simpson, Age: 9Name: Marge Simpson, Age: 45Name: Homer Simpson, Age: 47Name: Saku Jones, Age: 1Name: Bart Simpson, Age: 8Name: Lisa Simpson, Age: 9Name: Mikko Jones, Age: 32Name: Marge Simpson, Age: 45Name: 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. Кроме того, имейте в виду, что синтаксис инициализации объектов можно сочетать с синтаксисом инициализации коллекций.Personprivate 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
Теперь, когда вы понимаете, как работать с основными обобщенными классами, можно кратко рассмотреть дополнительное пространство имен, связанное с коллекциями —
. Это относительно небольшое пространство имен, содержащее совсем мало классов. В табл. 10.7 документированы два класса, о которых вы обязательно должны быть осведомлены.System.Collections.ObjectModel