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