以下代码创建了 List<string>
的中间实例并在 yield 返回之前将值附加到它。有没有一种好的方法可以避免创建实例并直接 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;
}
}
}
最佳答案
要避免创建列表,您可以使用 LINQ:
IEnumerable<IEnumerable<string>> GetStrValues()
{
return rows.Select(r => r.Cells().Select(getCellStr));
}
这将延迟执行,即不会创建中间列表。这是避免分配您不需要的内存的好方法(除非您要在内部 IEnumerable<string>
上迭代多次,而 getCellStr
很昂贵)。
关于c# - 产量返回 IEnumerable<IEnumerable<...>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468984/