public TValue this[TKey key ] { get; set;
}.
Этот индексатор служит для получения и
Установки значения элемента коллекции,
А также для добавления в коллекцию нового элемента. Но в данном случае в качестве
Индекса служит ключ элемента, а не сам индекс.
В приведенном ниже примере демонстрируется применение класса
SortedList<TKey, TValueX Это еще один измененный вариант представленного
ранее примера базы данных работников. В данном варианте база данных хранится в коллекции типа SortedList.
// Продемонстрировать применение класса обобщенной // коллекции SortedList<TKey, TValue>.
Using System;
Using System.Collections.Generic;
class GenSLDemo {
static void Main() {
// Создать коллекцию в виде отсортированного списка // для хранения имен и фамилий работников и их зарплаты.
SortedList<string, double> si =
new SortedList<string, double>();
// Добавить элементы в коллекцию, si.Add("Батлер, Джон", 73000); si.Add("Шварц, Capa", 59000); si.Add("Пайк, Томас", 45000); si.Add("Фрэнк, Эд", 99000);
// Получить коллекцию ключей, т.е. фамилий и имен.
ICollection<string> с = si.Keys;
// Использовать ключи для получения значений, т.е. зарплаты, foreach(string str in с)
Console.WriteLine("{0}, зарплата: {1:C}", str, si[str]);
Console.WriteLine();
}
}
Ниже приведен результат выполнения этой программы.
Батлер, Джон, зарплата: $73,000.00 Пайк, Томас, зарплата: $45,000.00 Фрэнк, Эд, зарплата: $99,000.00 Шварц, Сара, зарплата: $59,000.00
Как видите, список работников и их зарплаты отсортированы по ключу, в качестве которого в данном случае служит фамилия и имя работника.
Класс Stack<T>
Класс Stack<T> является обобщенным эквивалентом класса необобщенной коллекции Stack. В нем поддерживается стек в виде списка, действующего по принципу "первым пришел — последним обслужен". В этом классе реализуются интерфейсы Collection, IEnumerable и IEnumerable<T>. Кроме того, в классе Stack<T> непосредственно реализуются методы Clear(),Contains() иСоруТоО, определенные в интерфейсе ICollection<T>. А методы Add () и Remove () в этом классе не поддерживаются, как, впрочем, и свойство IsReadOnly. Коллекция класса Stack<T> имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться. В классе Stack<T> определяются следующие конструкторы.
Public Stack()
public Stack(int capacity)
public Stack(IEnumerable<T> collection)
В первой форме конструктора создается пустой стек с выбираемой по умолчанию первоначальной емкостью, а во второй форме — пустой стек, первоначальный размер которого определяет параметр capaci ty. И в третьей форме создается стек, содержащий элементы коллекции, определяемой параметром collection. Его первоначальная емкость равна количеству указанных элементов.
В классе Stack<T> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе ICollection<T>. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.20. Как и в классе Stack, эти методы обычно применяются следующим образом. Для того чтобы поместить объект на вершине стека, вызывается метод Push (). А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Pop (). Если же объект требуется только извлечь, но не удалить из вершины стека, то вызывается метод Реек (). А если вызвать метод Pop () или Реек (), когда вызывающий стек пуст, то сгенерируется исключение InvalidOperationException.
Таблица 25.20. Методы, определенные в классе Stack<T>
Метод
Описание
Public
T Peek()
Возвращает элемент, находящийся на вершине стека, но не удаляет его
Public
T Pop()
Возвращает элемент, находящийся на вершине стека, удаляя его в процессе работы
Public
void Push(T item)
Помещает элемент i tern в стек
Public
T[] ToArrayO
Возвращает массив, содержащий копии элементов вызывающего стека
Public
Void TrimExcessO
Сокращает избыточную емкость вызывающей коллекции в виде стека
В приведенном ниже примере программы демонстрируется применение класса Stack<T>.
// Продемонстрировать применение класса Stack<T>. using System;