以下代码创建一个中间实例List<string>
并在yield返回之前向其添加值。有没有避免创建实例并直接返回单元格值的好方法?产量返回IEnumerable <IEnumerable <...>>
IEnumerable<IEnumerable<string>> GetStrValues()
{
......
foreach (var r in rows)
{
var row = new List<string>();
foreach (var c in r.Cells())
{
var value = getCellStr(c);
row.Add(value);
}
yield return row;
}
}
}
奇怪的是,如果我想平坦的结果为'IEnumerable',我应该改变第一个'.Select('到'.SelectMany('? –
ca9163d9
@ dc7a9163d9:是的,这正是'SelectMany'是for,并且仍然使用延迟执行,所以这就是你应该用来如果你的意图是平坦的结果。 – Groo