Jad*_*ias 21 .net c# linq select yield
这两种方法的优点/缺点是什么?
return items.Select(item => DoSomething(item));
Run Code Online (Sandbox Code Playgroud)
与
foreach(var item in items)
{
yield return DoSomething(item);
}
Run Code Online (Sandbox Code Playgroud)
编辑因为他们是MSIL大致相当,你发现哪一个更具可读性?
Jef*_*tin 17
该yield return技术使C#编译器生成"幕后"的枚举器类,而Select调用使用带有委托参数化的标准枚举器类.在实践中,除了可能在Select案例中的额外调用框架之外,代理人之间不应该存在很大的差异.
对于它的价值,包裹一个lambda DoSomething也是毫无意义的; 只是直接传递代表.
Joe*_*Joe 11
在我目前花费的时间超过我希望的缓慢移动的企业世界中,产量回报具有巨大的优势,它不需要至少再安装两年的全新.NET 3.5 Framework .
选择仅允许您为“items”集合中的每一项返回一个对象。使用附加项.Where(x => DoIReallyWantThis(x))可以让您清除不需要的项目,但仍然只允许您为每个项目返回一个对象。如果您想要每个项目有多个对象,您可以使用.SelectMany,但很容易以一行长线结束,而且不太容易阅读。
如果您正在查看复杂的数据结构并到处挑选一些信息,那么“yield return”有可能使您的代码更具可读性。我见过的最好的例子是,大约有十几个单独的条件会导致返回的对象,并且在每种情况下,返回的对象的构造方式都不同。
| 归档时间: |
|
| 查看次数: |
7436 次 |
| 最近记录: |