我有一个巨大的IEnumerable
当我尝试在Array
转换它时:
var arr = myEnumerable.ToArray();
我收到了一个错误:
An unhandled exception of type 'System.StackOverflowException' occurred in System.Core.dll
当我使用此集合执行其他操作时触发相同的错误,例如:
var count = myEnumerable.Count();
在Visual Studio
我试图看到这个集合的属性,但是当我把鼠标光标放在它上面时,调试模式的结束就可以了。
我已修复此问题并移除IEnumerable
并仅使用Array
但我不明白。我的代码由try catch
覆盖,但我无法处理此异常。
在meny QA中,我读到我无法处理{1}}在非用户代码中触发的内容。
这是否意味着所有人都可以做到只是修复错误而不是试图抓住StackOverflowException
?
答案 0 :(得分:5)
你不会 - StackOverflowException
基本上是一个致命的错误。你无法抓住它;你需要修改你的代码。
即使你可以抓住StackOverflowException
,它仍然会指出应该修复的错误,有点像NullReferenceException
。
您应该看看您的序列是如何评估的。如果您使用带有递归调用的yield return
和一个深度树的天真树行走算法,则可能会出现此错误。
StackOverflowException
几乎总是涉及递归,修复几乎总是涉及完全删除递归,或者大幅减少需要递归的次数。