Ответ
Методы All() и Any() — это методы расширения LINQ, которые проверяют элементы последовательности на соответствие условию (предикату), но делают это противоположным образом.
All(Predicate<T>)возвращаетtrue, если ВСЕ элементы последовательности удовлетворяют заданному условию. Для пустой коллекции возвращаетtrue.Any(Predicate<T>)возвращаетtrue, если ХОТЯ БЫ ОДИН элемент последовательности удовлетворяет заданному условию. Для пустой коллекции возвращаетfalse.
Логическая связь: All(condition) эквивалентно !Any(!condition).
Примеры:
int[] numbers = { 2, 4, 6, 8, 10 };
// All - проверяет, что все числа четные
bool allEven = numbers.All(n => n % 2 == 0); // true
// Any - проверяет, есть ли хотя бы одно число больше 5
bool anyGreaterThanFive = numbers.Any(n => n > 5); // true
// Any - проверяет, есть ли отрицательные числа
bool anyNegative = numbers.Any(n => n < 0); // false
// Особый случай: Any() без предиката
bool collectionIsNotEmpty = numbers.Any(); // true (проверяет, не пуста ли коллекция)
Особенности производительности:
- Оба метода используют отложенное выполнение и применяют предикат к элементам последовательности до тех пор, пока не будет найден ответ.
Allостановится на первом элементе, который НЕ удовлетворяет условию, и вернетfalse.Anyостановится на первом элементе, который удовлетворяет условию, и вернетtrue.
Вывод: Используйте All для проверки глобального требования ко всем элементам. Используйте Any для проверки существования хотя бы одного подходящего элемента.