gpt4 book ai didi

c# - LINQ to objects 'where' 子句在幕后做什么?

转载 作者:太空狗 更新时间:2023-10-29 22:35:27 26 4
gpt4 key购买 nike

我刚刚替换了这段代码:

foreach( var source in m_sources )
{
if( !source.IsExhausted )
{
....
}
}

用这个:

foreach( var source in m_sources.Where( src => !src.IsExhausted ) )
{
...
}

现在代码看起来更好(对我而言),但我想知道这里到底发生了什么。我担心这种情况下的性能,如果应用此过滤器意味着会发生某种编译器魔术,那将是个坏消息。

这两段代码基本上是在做“相同”的事情吗?是否创建了临时容器来进行过滤然后将它们传递给我的 foreach?

非常感谢有关该主题的任何帮助。谢谢。

最佳答案

yield return 关键字和 lambda 确实涉及在编译时创建隐藏类和在运行时分配额外对象,如果您的背景是 C 或 C++,那么很自然关注性能。

自然,但错了!

I tried measuring the overhead对于对局部变量有闭包的 lambda,发现它非常小(几纳秒),几乎在所有应用程序中都没有意义。

关于c# - LINQ to objects 'where' 子句在幕后做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/664337/

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