Операции Range, Repeat и Empty
20LINQ --- LINQ to Objects --- Операции Range, Repeat и Empty
Операции генерации помогают в генерации последовательностей.
Range
Операция Range генерирует последовательность целых чисел. У операции Range есть один прототип, описанный ниже:
public static IEnumerable<int> Range(
int start,
int count);
Последовательность целых чисел генерируется, начиная со значения, переданного в start, протяженностью до count. Обратите внимание, что это не расширяющий метод, а одна из немногих стандартных операций запросов, которые не расширяют IEnumerable<T>.
Если count меньше 0 или сумма start и count минус 1 больше int.MaxValue, генерируется исключение ArgumentOutOfRangeException. Давайте рассмотрим пример использования операции Range:
IEnumerable<int> nums = Enumerable.Range(1, 100);
foreach (int i in nums)
Console.Write(i + " ");
Опять-таки, следует подчеркнуть, что операция Range не вызывается на последовательности. Это статический метод класса System.Linq.Enumerable. Вывод доказывает отсутствие каких-либо сюрпризов:

Repeat
Операция Repeat генерирует последовательность, повторяя указанный элемент заданное количество раз. У операции Repeat есть один прототип, описанный ниже:
public static IEnumerable<int> Repeat(
T element,
int count);
Этот прототип возвращает объект, который при перечислении выдаст count экземпляров элемента Т. Обратите внимание, что он является не расширяющим методом, а одной из немногих стандартных операций запросов, которые не расширяют IEnumerable<T>. Если значение аргумента count меньше нуля, генерируется исключение ArgumentOutOfRangeException.
Ниже показан пример, в котором генерируется последовательность из десяти элементов, каждый из которых является числом 2:
IEnumerable<int> nums = Enumerable.Repeat(2, 10);
foreach (int i in nums)
Console.Write(i + " ");

Empty
Операция Empty генерирует пустую последовательность заданного типа. Операция Empty имеет один прототип, представленный ниже:
public static IEnumerable<T> Empty<T>();
Этот прототип возвращает объект, при перечислении выдающий последовательность из нуля элементов типа Т. Обратите внимание, что это не расширяющий метод, а одна из немногих стандартных операций запросов, которая не расширяет IEnumerable<T>.
Ниже генерируется пустая последовательность типа string с использованием операции Empty и выводится значение Count для сгенерированной последовательности, которое должно быть равно нулю, поскольку последовательность пуста:
IEnumerable<string> str = Enumerable.Empty<string>();
foreach (string s in str)
Console.Write(s);
Console.WriteLine(str.Count());
Поскольку последовательность пуста, в цикле foreach отображать нечего, поэтому был предусмотрен вывод количества элементов в последовательности. Данный код выведет значение 0.