22

两种方法的优点/缺点是什么?

return items.Select(item => DoSomething(item));

相对

foreach(var item in items)
{
    yield return DoSomething(item);
}

编辑因为它们与 MSIL 大致相当,你觉得哪一个更具可读性?

4

3 回答 3

17

yield return技术使 C# 编译器在“幕后”生成一个枚举器类,而Select调用使用一个使用委托参数化的标准枚举器类。在实践中,这两者之间不应该有很大的区别,除了在这种情况下可能有一个额外的调用框架Select,对于代表。

对于它的价值,包装一个 lambdaDoSomething也是毫无意义的。只需直接为它传递一个代表。

于 2009-09-25T19:56:17.490 回答
12

在发展缓慢的企业世界中,我目前花费的时间比我希望的要多,收益回报具有巨大的优势,它不需要至少再过 2 年才会安装的全新 .NET 3.5 框架.

于 2009-09-25T21:57:37.797 回答
4

Select only 允许您为“项目”集合中的每个项目返回一个对象。使用附加.Where(x => DoIReallyWantThis(x))项可以让您清除不需要的项目,但仍然只允许您为每个项目返回一个对象。如果您希望每个项目可能有多个对象,则可以使用.SelectMany,但很容易以一条不易阅读的长线结束。

如果您正在查看复杂的数据结构并在这里和那里挑选一些信息,“收益回报”有可能使您的代码更具可读性。我见过的最好的例子是,大约有十几个不同的条件会导致返回对象,并且在每种情况下,返回的对象的构造都不同。

于 2009-09-25T20:08:44.530 回答