如何处理StackOverflowException

时间:2018-06-09 07:42:36

标签: c#

我有一个巨大的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

1 个答案:

答案 0 :(得分:5)

你不会 - StackOverflowException基本上是一个致命的错误。你无法抓住它;你需要修改你的代码。

即使你可以抓住StackOverflowException,它仍然会指出应该修复的错误,有点像NullReferenceException

您应该看看您的序列是如何评估的。如果您使用带有递归调用的yield return和一个深度树的天真树行走算法,则可能会出现此错误。

StackOverflowException几乎总是涉及递归,修复几乎总是涉及完全删除递归,或者大幅减少需要递归的次数。