Собственный метод расширения для последовательностей в C#
В этом уроке вы напишете метод расширения None() для любой последовательности, который проверяет, что ни один элемент не удовлетворяет условию.
Введение
Методы расширения позволяют добавлять к существующим типам операции с понятными названиями. Здесь вы напишете метод None, противоположный Any из LINQ: он возвращает true, когда ни один элемент не удовлетворяет условию.
Метод None<T> расширяет IEnumerable<T>, поэтому работает с массивами, List и любой другой последовательностью. Цикл перебирает элементы и сразу возвращает false, как только находит подходящий под условие; если дошёл до конца, возвращает true. В массиве [1, 3, 5] нет чётных чисел, поэтому результат True.
Пример на C#, который можно запустить
using System;
using System.Collections.Generic;
static class EnumerableExtensions
{
public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
foreach (T item in source) if (predicate(item)) return false;
return true;
}
}
class Program
{
static void Main() => Console.WriteLine(new[] { 1, 3, 5 }.None(number => number % 2 == 0));
}
TrueПрактика с отладчиком
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
- Удаление дубликатов Оставьте только первое вхождение каждого значения. Легко
- Разбить список на части Разрезать список на последовательные группы фиксированного размера, при необходимости с более короткой последней группой. Легко