我的工作经验如下.
List<Thing> things = new List<Thing>();
foreach (Original original in originals)
things.Add(new Thing(orignal));
Run Code Online (Sandbox Code Playgroud)
然后,我变得聪明并将其LINQified到以下,仍在工作的代码.
IEnumerable<Thing> things = originals.Select(origo => new Thing(origo));
Run Code Online (Sandbox Code Playgroud)
感到非常自豪的是抽取行数以及LINQing自己更清晰的代码我意识到还需要更新进程表.在我们进行转换时,必须同时进行更新.因此,我的双腿之间的尾巴感觉不那么自豪,我回到原始代码并添加了通知方法.
List<Thing> things = new List<Thing>();
foreach (Original original in originals)
{
things.Add(new Thing(orignal));
DoTell();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否可以保留LINQie语法并仍能以某种方式合并出纳员.我并不希望代码看起来不错,也不会那么可读(尽管如此,它会很棒).但是,目前它的学术好奇心和纯粹固执的问题-我想知道它是否能够做到在所有.
这样做有一种非常难看的方式.这纯粹是学术性的.
IEnumerable<Thing> things = originals.Select(origo => {DoTell(); return new Thing(origo)});
Run Code Online (Sandbox Code Playgroud)
您将更新表格并返回new Thing在Select.选择不会失败,因为你在其中使用括号并告诉你只返回new Thing不是结果DoTell()
我建议你一起去,foreach因为它最终看起来会更干净.在任何地方使用LINQ都不是更清晰/更清晰的代码的解决方案.
编辑:
如果你仍然想要使用LINQ,你甚至可以做它更丑陋的版本(单行):
var things = things.Select(x => new { o = new Thing(), b = DoTell()}).Select(x=>x.o);
Run Code Online (Sandbox Code Playgroud)
这种做法纯粹是邪恶的.但它没有返回声明:)