有没有办法可以应用带签名的功能
bool IsOdd(int number);
到整数数组并返回单个指令中该数组中的任何给定整数是否为奇数?我知道我可以使用
return (array.Where(IsOdd).Count() > 0);
但这意味着调用两个方法并进行比较......是不是真的有一个更短的方法来实现相同的目标?
答案 0 :(得分:17)
是
首先,您可以使用带有谓词的Count
形式:
return array.Count(IsOdd) > 0;
...但你不想这样做。该代码仍然表示不必要的数字比较。您想询问数组中的任何项是否为奇数。换句话说:
return array.Any(IsOdd);
这不仅更具表现力 - 它还可能更快。只要Any
找到匹配项,它就会返回true
- 而Count
必须遍历整个数组才能找到确切的匹配数量是
基本上,只要您使用Count() > 0
查看LINQ查询,就应该考虑使用Any
。在某些情况下,使用基于表达式的查询(如LINQ to SQL)可能不会产生性能差异(如果查询优化器具有与0的比较可见性),但在LINQ to Objects中它当然可以