【发布时间】:2014-09-27 04:45:30
【问题描述】:
应用程序因堆栈溢出错误而意外崩溃。经过研究,我发现崩溃的原因是以下代码:
foreach (var item in items)
{
result = result.Concat(item.Data);
}
这是多个IEnumerables 的串联。当items 包含 10,000 个元素时,应用程序崩溃。
SelectMany 修复了这个问题。不过还是……
为什么Concat 扩展在这里会导致堆栈溢出?
【问题讨论】:
-
再一次:如果我能教给大家关于 LINQ 的一件事,那就是 查询表达式的结果是一个可以执行查询的对象,而不是 执行查询的结果.
-
另见 en.wikipedia.org/wiki/Joel_Spolsky 的 Schlemiel-the-painter 部分。你已经实现了这个算法的延迟执行版本。
标签: c# .net linq concatenation stack-overflow