LINQ 扩展方法的顺序
问题来源: LINQ 扩展方法的顺序不会影响性能?
问题:
为什么 LINQ 扩展方法的顺序不会显着影响性能?例如,比较以下两个语句,人们可能会认为 Where
后跟 FirstOrDefault
比 FirstOrDefault
后跟 Where
慢:
<code class="language-csharp">hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault(); hugeList.FirstOrDefault(x => x.Text.Contains("10000"));</code>
解答:
认为 Where
后跟 FirstOrDefault
会更慢的假设是错误的。 Where
不需要在获取第一个匹配项之前找到所有匹配项。它按需检索匹配项,这意味着如果只需要第一个匹配项,它会在找到第一个匹配项后停止。
为了说明这一点,想象一下以下场景:
有三个人参与:
- A 持有一副洗好的牌。
- B 穿着一件写着“如果牌是红色的”的衬衫。
- C 对 B 说:“给我第一张牌。”
B 会反复向 A 请求牌,直到 A 提供一张红牌。一旦获得第一张红牌,它就会交给 C,过程结束。 B 在找到第一张红牌后不需要继续向 A 请求牌。
同样,在 LINQ 语句中,Where
就像 B,过滤牌(列表中的项)以找到第一个匹配项。它不需要在返回第一个匹配项之前找到所有匹配项。
另一方面,如果扩展方法的顺序颠倒,FirstOrDefault
后跟 Where
,情况就不同了。 FirstOrDefault
需要检索第一个项,然后 Where
需要应用其过滤器,这将涉及遍历所有项。这将比 Where
后跟 FirstOrDefault
效率低。
因此,在确定 LINQ 扩展方法的性能影响时,务必考虑应用它们的顺序,因为它会根据所使用的特定方法影响操作的效率。
以上是LINQ 扩展方法的顺序(例如,Where 和 FirstOrDefault)是否会影响性能?的详细内容。更多信息请关注PHP中文网其他相关文章!