ca9*_*3d9 2 c# linq deferred-execution
以下代码List<string>在yield返回之前创建一个中间实例并向其追加值.有没有一种好方法可以避免创建实例并且直接返回单元格值?
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
为避免创建列表,您可以使用LINQ:
IEnumerable<IEnumerable<string>> GetStrValues()
{
return rows.Select(r => r.Cells().Select(getCellStr));
}
Run Code Online (Sandbox Code Playgroud)
这将懒惰地执行,即不会创建中间列表.这是一种避免分配你不需要的内存的简洁方法(除非你要在内部迭代多次IEnumerable<string>,而且getCellStr价格昂贵).
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |