gpt4 book ai didi

c# - 产量返回 IEnumerable>

转载 作者:行者123 更新时间:2023-11-30 19:09:02 27 4
gpt4 key购买 nike

以下代码创建了 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/

27 4 0