当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《LINQtoobjects'wherewhere子句在幕后做什么?》经验,为你挑选了1个好方法。

我刚刚替换了这段代码:

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

这一个:

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

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

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

任何有关该主题的帮助将非常感激.谢谢.



1> Daniel Earwi..:

yield return关键字与lambda表达式做涉及在编译时创建隐藏的类和额外的对象在运行时的配置,如果你的背景是C或C++,然后很自然要关注性能.

自然,但错了!

我尝试用局部变量的闭包来测量 lambdas 的开销,发现它非常小(几纳秒),几乎在所有应用程序中都没有意义.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有