gpt4 book ai didi

c# - 编译器会优化与 IEnumerable.Count() 的比较吗?

转载 作者:行者123 更新时间:2023-11-30 14:07:27 24 4
gpt4 key购买 nike

作为一个天真的提示,您经常听到使用 IEnumerable.Any(),因为这样就不一定需要遍历整个枚举。

我刚刚写了一小段代码,试图查看 Enumerable 是否包含单个项目或多个项目。

if (reportInfo.OrebodyAndPits.SelectMany(ob => ob.Pits).Count() > 1)
{
ws.Cells[row, col++].Value = "Pits";
}
else
{
ws.Cells[row, col++].Value = "Pit";
}

这让我想知道,比较是否会被编译成一种足够聪明的形式,以便在枚举超过第一项时立即返回 false?

如果没有,有没有办法编写一个 linq 扩展方法来做到这一点?

(请注意,我对这段代码的性能影响不是很感兴趣。我主要是好奇。)

最佳答案

不,不会。您的代码将计算序列中的所有项目。这是因为 LINQ 语句没有经过编译器优化,你写的就是你得到的。

检查序列是否包含超过 1 个项目的等效、更有效的方法是:

reportInfo.OrebodyAndPits.SelectMany(ob => ob.Pits).Skip(1).Any();

这将在跳过第一个项目后检查是否还有剩余的项目。

关于c# - 编译器会优化与 IEnumerable<T>.Count() 的比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40839396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com