English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Генерационные операторы LINQ Empty, Range, Repeat

LINQ включает генерационные операторы DefaultIfEmpty, Empty, Range & Repeat. Методы Empty, Range и Repeat не являются расширениями IEnumerable или IQueryable, а просто статическими методами, определенными в статическом классе Enumerable.  

МетодОписание
EmptyВозвращает пустой набор
RangeСначала из первого элемента, используя указанное количество элементов с последовательными значениями, создается набор типа IEnumerable <T>.
RepeatСоздание набора IEnumerable<T> с заданным количеством элементов и каждым элементом, содержащим одинаковые заданные значения.

Empty

Empty() как и другие методы LINQ, не является расширением IEnumerable или IQueryable. Это статический метод, включенный в статический класс Enumerable. Таким образом, вы можете вызывать его, как и другие статические методы (например, Enumerable.Empty<TResult>()). Метод Empty() возвращает пустой набор заданного типа, как показано ниже.

var emptyCollection1 = Enumerable.Empty<string>();
var emptyCollection2 = Enumerable.Empty<Student>();
Console.WriteLine("Count: {0}", emptyCollection1.Count());
Console.WriteLine("Type: {0}", emptyCollection1.GetType().Name);
Console.WriteLine("Count: {0}", emptyCollection2.Count());
Console.WriteLine("Type: {0}", emptyCollection2.GetType().Name);
Вывод:
Type: String[]
Count: 0
Type: Student[]
Count: 0

Range

Метод Range() возвращает набор IEnumerable<T> с заданным количеством элементов и последовательными значениями от первого элемента.

var intCollection = Enumerable.Range(10, 10);
Console.WriteLine("Общее количество: {0}", intCollection.Count());
for(int i = 0; i < intCollection.Count(); i++)
    Console.WriteLine("Значение, положение индекса {0} : {1}", i, intCollection.ElementAt(i));
Вывод:

Общее количество: 10
Значение, индекс位置的值为 0: 10
Значение, индекс位置的值为 1: 11
Значение, индекс位置的值为 2: 12
Значение, индекс位置的值为 3: 13
Значение, индекс位置的值为 4: 14
Значение, индекс位置的值为 5: 15
Значение, индекс位置的值为 6: 16
Значение, индекс位置的值为 7: 17
Значение, положение индекса 8: 18
Значение, положение индекса 9: 19

В предыдущем примере Enumerable.Range(10, 10) создало множество из 10 элементов типа int, значения которых начинаются от 10. Первый параметр определяет начальное значение элементов, второй параметр определяет количество создаваемых элементов.

Repeat

Метод Repeat() использует указанное количество элементов для создания множества типа IEnumerable<T>, каждый элемент содержит одинаковое указанное значение.

var intCollection = Enumerable.Repeat<int>(10, 10);
Console.WriteLine("Общее количество: {0}", intCollection.Count());
for(int i = 0; i < intCollection.Count(); i++)
    Console.WriteLine("Значение, положение индекса {0} : {1}", i, intCollection.ElementAt(i));
Вывод:
Общее количество: 10
Значение, положение индекса 0: 10
Значение, положение индекса 1: 10
Значение, положение индекса 2: 10
Значение, положение индекса 3: 10
Значение, положение индекса 4: 10
Значение, положение индекса 5: 10
Значение, положение индекса 6: 10
Значение, положение индекса 7: 10
Значение, положение индекса 8: 10
Значение, положение индекса 9: 10

В предыдущем примере Enumerable.Repeat<int>(10, 10) Создайте множество из 100 элементов типа int с повторяющимся значением 10, первый параметр определяет значение всех элементов, второй параметр определяет количество создаваемых элементов.