Операции Range, Repeat и Empty

20

Операции генерации помогают в генерации последовательностей.

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. Вывод доказывает отсутствие каких-либо сюрпризов:

Вызов операции Range

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 + "  ");
Вызов операции Repeat

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.

Пройди тесты
Лучший чат для C# программистов