c# - Linq & boolean 函数

标签 c# linq boolean

有什么方法可以应用带有签名的函数

bool IsOdd(int number);

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

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

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

最佳答案

是的。

首先,您可以使用带有谓词的 Count 形式:

return array.Count(IsOdd) > 0;

...但您不想那样做。该代码仍在表达不必要的数值比较。您想询问数组中的任何是否为奇数。换句话说:

return array.Any(IsOdd);

这不仅更具表现力 - 它也可能更快。一旦 Any 找到匹配项,它将返回 true - 而 Count 将不得不遍历整个数组以准确找出有多少匹配项。

基本上,每当您看到使用 Count() > 0 的 LINQ 查询时,您应该考虑使用 Any。在某些情况下,对于基于表达式树的查询,例如 LINQ to SQL,它可能不会产生性能差异(如果查询优化器可以看到与 0 的比较),但在 LINQ to Objects 中它肯定可以.

关于c# - Linq & boolean 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217044/

相关文章:

c# - 从窗体打开 WPF 窗口后,WinForms 应用程序更改其缩放比例

接口(interface)中的 C# 数据注释

c# - 如何在PC默认的文本编辑软件(不是默认的关联应用程序)中打开文件?

C#:遍历数据表:Rows、Select() 或 AsEnumerable()

clojure - Clojure中的(Boolean.false)

android - 无法分配局部变量,因为它是在外部定义的

c# - 播放任何声音文件(或至少播放普通音频文件)

c# - Azure DocumentDB,使用 LINQ 在字典中搜索

sql - Linq,双左连接和双计数

C++ boolean 数组作为位域?