[英]Yield return IEnumerable<IEnumerable<…>>
以下代码创建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;
}
}
}
为避免创建列表,您可以使用LINQ:
IEnumerable<IEnumerable<string>> GetStrValues()
{
return rows.Select(r => r.Cells().Select(getCellStr));
}
这将懒惰地执行,即不会创建中间列表。 这是一种避免分配你不需要的内存的简洁方法(除非你要在内部IEnumerable<string>
多次迭代,并且getCellStr
很昂贵)。
您可以使用两个函数获得每个单元格的自定义操作。
IEnumerable<IEnumerable<string>> GetStrValues()
{
......
foreach (var r in rows)
{
yield return GetCellValues(row);
}
}
}
IEnumerable<string> GetCellValues(Row r)
{
foreach (var c in r.Cells())
{
yield return getCellStr(c);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.