两种方法的优点/缺点是什么?
return items.Select(item => DoSomething(item));
相对
foreach(var item in items)
{
yield return DoSomething(item);
}
编辑因为它们与 MSIL 大致相当,你觉得哪一个更具可读性?
该yield return
技术使 C# 编译器在“幕后”生成一个枚举器类,而Select
调用使用一个使用委托参数化的标准枚举器类。在实践中,这两者之间不应该有很大的区别,除了在这种情况下可能有一个额外的调用框架Select
,对于代表。
对于它的价值,包装一个 lambdaDoSomething
也是毫无意义的。只需直接为它传递一个代表。
在发展缓慢的企业世界中,我目前花费的时间比我希望的要多,收益回报具有巨大的优势,它不需要至少再过 2 年才会安装的全新 .NET 3.5 框架.
Select only 允许您为“项目”集合中的每个项目返回一个对象。使用附加.Where(x => DoIReallyWantThis(x))
项可以让您清除不需要的项目,但仍然只允许您为每个项目返回一个对象。如果您希望每个项目可能有多个对象,则可以使用.SelectMany
,但很容易以一条不易阅读的长线结束。
如果您正在查看复杂的数据结构并在这里和那里挑选一些信息,“收益回报”有可能使您的代码更具可读性。我见过的最好的例子是,大约有十几个不同的条件会导致返回对象,并且在每种情况下,返回的对象的构造都不同。