[英]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.