Linq&布尔函数

时间:2011-08-27 20:07:56

标签: c# linq boolean

有没有办法可以应用带签名的功能

bool IsOdd(int number);

到整数数组并返回单个指令中该数组中的任何给定整数是否为奇数?我知道我可以使用

return (array.Where(IsOdd).Count() > 0);

但这意味着调用两个方法并进行比较......是不是真的有一个更短的方法来实现相同的目标?

1 个答案:

答案 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中它当然可以