Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
40.doc
Скачиваний:
14
Добавлен:
30.04.2022
Размер:
646.66 Кб
Скачать

15.1.3. Интерфейс iDictionary

В интерфейсе IDictionary определяется такое поведение необобщенной коллекции, которое позволяет преобразовать уникальные ключи в соответствующие значения. Ключ представляет собой объект, с помощью которого значение извлекается впоследствии. Следовательно, в коллекции, реализующей интерфейс IDictionary, хранятся пары "ключ-значение". Как только подобная пара будет сохранена, ее можно извлечь с помощью ключа. Интерфейс IDictionary наследует от интерфейсов ICollection и IEnumerable. Некоторые из методов, объявленных в IDictionary, генерируют исключение ArgumentNullException при попытке указать пустой ключ, поскольку пустые ключи не допускаются.

Методы, определенные в IDictionary:

1) void Add(object key, object value) - добавляет в вызывающую коллекцию пару "ключ-значение", определяемую параметрами key и value.

2) void Clear() - удаляет все пары "ключ-значение" из вызывающей коллекции.

3) bool Contains(object key) - возвращает логическое значение true, если вызывающая коллекция содержит объект key в качестве ключа, в противном случае — логическое значение false.

4) iDictionaryEnumerator GetEnumerator() - возвращает перечислитель для вызывающей коллекции.

5) void Remove (object key) - удаляет из коллекции элемент, ключ которого равен значению параметра key.

Свойства, определенные в IDictionary:

1) bool isFixedSize { get; } - принимает логическое значение true, если словарь имеет фиксированный размер;

2) bool isReadOnly{ get; } - принимает логическое значение true, если словарь доступен только для чтения;

3) ICollection Keys { get; } - получает коллекцию ключей;

4) ICollection Values { get; } - получает коллекцию значений.

Кроме того, в интерфейсе IDictionary определяется следующий индексатор.

object this[object key] { get; set; }

Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в качестве индекса в данном случае служит ключ элемента, а не собственно индекс.

Пример:

using System;

using System.Collections;

using System.Collections.Generic;

using System.Collections.ObjectModel;

using System.Text;

public class MainClass

{

public static void Main()

{

IDictionary<string, float> salaryMap = new

Dictionary<string, float>();

salaryMap.Add("S", 60.5);

salaryMap.Add("W", 10.0);

salaryMap.Add("J", 30.99);

Console.WriteLine(salaryMap.ContainsKey("S"));

Console.WriteLine(salaryMap.ContainsKey("T"));

}

}

16. Использование linq для работы с коллекциями

Аббревиатура LINQ означает Language-Integrated Query, т.е. язык интегрированных запросов. Это понятие охватывает ряд средств, позволяющих извлекать информацию из источника данных. Извлечение данных составляет важную часть многих программ. Например, программа может получать информацию из списка заказчиков, искать информацию в каталоге продукции или получать доступ к учетному документу, заведенному на работника. Как правило, такая информация хранится в базе данных, существующей отдельно от приложения. В прошлом для взаимодействия с такой базой данных приходилось формировать запросы на языке структурированных запросов (SQL). А для доступа к другим источникам данных, например в формате XML, требовался отдельный подход.

LINQ дополняет С# средствами, позволяющими формировать запросы для любого LINQ-совместимого источника данных. При этом синтаксис, используемый для формирования запросов, остается неизменным, независимо от типа источника данных. Возможности формировать запросы отныне полностью интегрированы в язык С#.

В основу LINQ положено понятие запроса, в котором определяется информация, получаемая из источника данных.

Как только запрос будет сформирован, его можно выполнить. Это делается, в частности, в цикле foreach. В результате выполнения запроса выводятся его результаты. Поэтому использование запроса может быть разделено на две главные стадии. На первой стадии запрос формируется, а на второй — выполняется. Таким образом, при формировании запроса определяется, что именно следует извлечь из источника данных. А при выполнении запроса выводятся конкретные результаты.

Для обращения к источнику данных по запросу, сформированному средствами LINQ, в этом источнике должен быть реализован интерфейс IEnumerable. Он имеет две формы: обобщенную и необобщенную. Как правило, работать с источником данных легче, если в нем реализуется обобщенная форма IEnumerable<T>, где Т обозначает обобщенный тип перечисляемых данных. Этот интерфейс объявляется в пространстве имен System.Collections.Generic. Класс, в котором реализуется форма интерфейса IEnumerable<T>, поддерживает перечисление, а это означает, что его содержимое может быть получено по очереди или в определенном порядке. Форма интерфейса IEnumerable<T> поддерживается всеми массивами в С#. Поэтому на примере массивов можно наглядно продемонстрировать основные принципы работы LINQ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]