wis*_*ter 1 .net c# linq stack-overflow concatenation
应用程序意外崩溃,堆栈溢出错误.经过研究,我发现崩溃的原因是遵循以下代码:
foreach (var item in items)
{
result = result.Concat(item.Data);
}
Run Code Online (Sandbox Code Playgroud)
这是多个IEnumerables的连接.应用程序在items包含10,000个元素时崩溃.
SelectMany解决了这个问题.但还是......
为什么Concat扩展导致堆栈溢出?
请记住,结果Concat不是集合 - 它是一个查询.
所以你的"结果"是有效的
Enumerable.Concat(item10000.Data,
Enumerable.Concat(item9999.Data,
....
Enumerable.Concat(item2.Data,
item1.Data))));
Run Code Online (Sandbox Code Playgroud)
生成嵌套查询时,会导致堆栈溢出.
另一种选择是创建一个列表并每次添加它:
var list = new List<something>();
foreach (var item in items)
{
list.AddRange(item.Data);
}
Run Code Online (Sandbox Code Playgroud)
这基本上是SelectMany做什么的(但是使用延迟的枚举器,而不是a List):
result = items.SelectMany(item => item.Data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |