Положительные значения из массива nums после изменений в нем: 1 99 3 5

Как следует из результата выполнения приведенной выше программы, значение элемента массива nums [ 1 ] изменилось с -2 на 99, что и отражают результаты повторного выполнения запроса. Этот важный момент следует подчеркнуть особо. Каждая попытка выполнить запрос приносит свои результаты, получаемые при перечислении текущего содержимого источника данных. Поэтому если источник данных претерпевает изменения, то могут измениться и результаты выполнения запроса. Преимущества такого подхода к обработке'запросов весьма значительны. Так, если по запросу получается список необработанных заказов в Интернет-магазине, то при каждой попытке выполнить запрос желательно получить сведения обо всех заказах, включая и только что введенные.

Связь между типами данных в запросе

Как показывает предыдущий пример, запрос включает в себя переменные, типы которых связаны друг с другом. К их числу относятся переменная запроса, переменная диапазона и источник данных. Соблюсти соответствие этих типов данных очень важно, но в то же время нелегко — по крайней мере, так кажется на первый взгляд, поэтому данный вопрос заслуживает более пристального внимания.

Тип переменной диапазона должен соответствовать типу элементов, хранящихся в источнике данных. Следовательно, тип переменной диапазона зависит от типа источника данных. Как правило, тип переменной диапазона может быть выведен средствами С#. Но выводимость типов может быть осуществлена при условии, что в источнике данных реализована форма интерфейсаIEnumerable,гдеТобозначает тип элементов в источнике данных. (Как упоминалось выше, форма интерфейсаIEnumerableреализуется во всех массивах, как, впрочем, и во многих других источниках данных.) Но если в источнике данных реализован необобщенный вариант интерфейсаI Enumerable,то тип переменной диапазона придется указывать явно. И это делается в оператореfrom.Ниже приведен пример явного объявления типаintпеременной диапазонап.

var posNums = from int n in nums // ...

Очевидно, что явное указание типа здесь не требуется, поскольку все массивы неявно преобразуются в форму интерфейсаIEnumerable,которая позволяет вывести тип переменной диапазона.

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

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