Полное руководство по языку программирования С# 14 и платформе .NET 10 / LINQ

Методы Skip и Take

Начальный ⏱ 3 мин чтения 👁 2 🕓 обновлено 11.08.2026

Ряд методов в LINQ позволяют получить часть коллекции, в частности, такие методы как Skip, Take, SkipWhile, TakeWhile.

Skip

Метод Skip() пропускает определенное количество элементов. Количество пропускаемых элементов передается в качестве параметра в метод:


string[] people = { "Tom", "Sam", "Bob", "Mike", "Kate" };
// пропускаем первые два элемента
var result = people.Skip(2);    // "Bob", "Mike", "Kate"

foreach (var person in result)
    Console.WriteLine(person);

В данном случае пропускаем первые два элемента. Консольный вывод:

Bob
Mike
Kate

Если необходимо пропустить определенное количество элементов с конца коллекции, то применяется метод SkipLast():


string[] people = { "Tom", "Sam", "Bob", "Mike", "Kate" };
// пропускаем последние два элемента
var result = people.SkipLast(2);    // "Tom", "Sam", "Bob"

foreach (var person in result)
    Console.WriteLine(person);

В данном случае пропускаем последние два элемента. Консольный вывод:

Tom
Sam
Bob

SkipWhile

Метод SkipWhile() пропускает цепочку элементов, начиная с первого элемента, пока они удовлетворяют определенному условию:

SkipWhile(Func<TSource, bool> predicate);

В метод передается делегат, который представляет условие, он получает каждый элемент коллекции и возвращает значение true, если элемент соответствует условию. Например:


string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob" };
// пропускаем первые элементы, длина которых равна 3
var result = people.SkipWhile(p=> p.Length == 3);    // "Mike", "Kate", "Bob"

foreach (var person in result)
    Console.WriteLine(person);

Здесь метод SkipWhile пропускает элементы, длина которых равна 3 символам. Первые два элемента массива people ("Tom", "Sam") соответствуют этому условию и поэтому будут пропущены. На третьем элементе ("Mike") цепочка обрывается, поэтому последний элемент ("Bob"), длина которго тоже равна 3-м символам, не будет пропущен и будет включен в выходную коллекцию:

Mike
Kate
Bob

Если в массиве первый элемент имел бы длину больше или меньше 3 символов, то цепочка пропускаемых элементов прервалась бы уже на первом элементе, и поэтому метод SkipWhile возвратил бы все элементы массива.

Take

Метод Take() извлекает определенное число элементов. Количество извлекаемых элементов передается в метод в качестве параметра. Например, извлечем три первых элемента:


string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob" };
// извлекаем первые 3 элемента
var result = people.Take(3);    // "Tom", "Sam", "Mike"

foreach (var person in result)
    Console.WriteLine(person);

Метод TakeLast() извлекает определенное количество элементов с конце коллекции:


string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob" };
// извлекаем последние 3 элемента
var result = people.TakeLast(3);    // "Mike", "Kate", "Bob"

foreach (var person in result)
    Console.WriteLine(person);

TakeWhile

Метод TakeWhile() выбирает цепочку элементов, начиная с первого элемента, пока они удовлетворяют определенному условию:

TakeWhile(Func<TSource, bool> predicate);

В метод передается делегат, который представляет условие, он получает каждый элемент коллекции и возвращает значение true, если элемент соответствует условию. Например:


string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob" };
// извлекаем первые элементы, длина которых равна 3
var result = people.TakeWhile(p=> p.Length == 3);    // "Tom", "Sam"

foreach (var person in result)
    Console.WriteLine(person);

Здесь метод TakeWhile выбирает элементы, длина которых равна 3 символам. Первые два элемента массива people ("Tom", "Sam") соответствуют этому условию и поэтому будут выбраны в выходную коллекцию. На третьем элементе ("Mike") цепочка обрывается, поэтому последний элемент ("Bob"), длина которго тоже равна 3-м символам, не будет включен в выходную коллекцию:

Tom
Sam

Если бы первый элемент в массиве имел бы длину больше или меньше 3 символов, то в этом случае метод TakeWhile возвратил бы нам 0 элементов.

Постраничный вывод

Совмещая оба метода - Take и Skip, мы можем выбрать определенное количество элементов начиная с определенного элемента. Например, выберем два элемента, начиная со четвертого (то есть пропустим 3 первых элемента):


string[] people = { "Tom", "Sam", "Mike", "Kate", "Bob", "Alice" };
// пропускаем 3 элемента и выбираем 2 элемента
var result = people.Skip(3).Take(2);    // "Kate", "Bob"

foreach (var person in result)
    Console.WriteLine(person);

Проверь себя

📋 Тест по теме «Методы Skip и Take» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string[] _____ = { "Tom", "Sam", "Bob", "Mike", "Kate" };
// пропускаем первые два элемента
var result = people.Skip(2);    // "Bob", "Mike", "Kate"

foreach (var person in result)
    Console.WriteLine(person);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string[] people = { "_____", "Sam", "Bob", "Mike", "Kate" };
// пропускаем последние два элемента
var result = people.SkipLast(2);    // "Tom", "Sam", "Bob"

foreach (var person in result)
    Console.WriteLine(person);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

SkipWhile(Func<_____, bool> predicate);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string[] people = { "Tom", "Sam", "_____", "Kate", "Bob" };
// пропускаем первые элементы, длина которых равна 3
var result = people.SkipWhile(p=> p.Length == 3);    // "Mike", "Kate", "Bob"

foreach (var person in result)
    Console.WriteLine(person);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string[] people = { "Tom", "Sam", "Mike", "_____", "Bob" };
// извлекаем первые 3 элемента
var result = people.Take(3);    // "Tom", "Sam", "Mike"

foreach (var person in result)
    Console.WriteLine(person);
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

string[] people = { "Tom", "Sam", "_____", "Mike", "Kate" };
// пропускаем первые два элемента
var result = people.Skip(2);    // "Bob", "Mike", "Kate"

foreach (var person in result)
    Console._____(person);
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

string[] people = { "Tom", "Sam", "_____", "Mike", "Kate" };
// пропускаем последние два элемента
var _____ = people.SkipLast(2);    // "Tom", "Sam", "Bob"

foreach (var person in result)
    Console.WriteLine(person);
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

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

var result = people.Skip(2);    // "Bob", "Mike", "Kate"
foreach (var person in result)
    Console.WriteLine(person);
string[] people = { "Tom", "Sam", "Bob", "Mike", "Kate" };
// пропускаем первые два элемента
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Методы Skip и Take»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Методы Skip и Take», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

string[] people = { "Tom", "Sam", "Bob", "Mike", "Kate" };
// пропускаем первые два элемента
var result = people.Skip(2);    // "Bob", "Mike", "Kate"

foreach (var person in result)
    Console.WriteLine(person);
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Методы Skip и Take»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

string[] people = { "Tom", "Sam", "Bob", "Mike", "Kate" };
// пропускаем последние два элемента
var result = people.SkipLast(2);    // "Tom", "Sam", "Bob"

foreach (var person in result)
    Console.WriteLine(person);
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Методы Skip и Take»
+50 XP

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

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Методы Skip и Take»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Методы Skip и Take». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.