Я сталкивался с ситуациями, когда я чувствую, что мне не хватает метода расширения LINQ, который эффективно проверяет, нет ли совпадения с указанным предикатом в коллекции. Существует Any
и All
, но если я, например, использую следующий код:
if (Objects.All(u => u.Distance <= 0))
Это возвращает true, если все объекты в коллекции находятся на расстоянии 0 или менее ярдов.
if (Objects.Any(u => u.Distance <= 0))
Это возвращает true, если в коллекции есть хотя бы один объект, который находится в 0 или менее ярдах от меня.
Пока все хорошо, оба эти метода имеют смысл, и синтаксис для них тоже имеет смысл. Теперь, если я хочу проверить, нет ли объекта с 0 или меньшим расстоянием, мне пришлось бы инвертировать предикат внутри метода All
до >= 0
вместо <= 0
или вызвать !All()
, который в некоторых случаи приводят к очень плохо читаемому коду.
Нет ли метода, эффективно выполняющего Collection.None(u => u.Distance <= 0)
, чтобы проверить, нет ли объекта в коллекции, который находится на расстоянии 0 или менее ярдов? Это синтаксический сахар больше, чем реальная проблема, но у меня просто ощущение, что оно отсутствует.