Да.
Для начала вы можете использовать форму Count
, которая принимает предикат:
return array.Count(IsOdd) > 0;
... но ты не хочешь этого делать. Этот код все еще выражает численное сравнение, которое не является необходимым. Вы хотите спросить, является ли любой элемент в массиве нечетным . Другими словами:
return array.Any(IsOdd);
Это не только более выразительно, но и потенциально гораздо быстрее . Как только Any
найдет совпадение, он вернет true
- тогда как Count
придется перебрать массив целом , чтобы точно определить, сколько совпадений есть.
По сути, всякий раз, когда вы видите запрос LINQ, использующий Count() > 0
, вам следует подумать об использовании Any
. В некоторых случаях с запросами на основе дерева выражений, такими как LINQ to SQL, это может не иметь значения для производительности (, если оптимизатор запросов имеет видимость сравнения с 0), но в LINQ to Objects это, безусловно, может.