C# 如何处理StackOverflowException
我得到了一个巨大的C# 如何处理StackOverflowException,c#,C#,我得到了一个巨大的IEnumerable,当我试图在数组中转换它时: var arr = myEnumerable.ToArray(); 我有一个错误: An unhandled exception of type 'System.StackOverflowException' occurred in System.Core.dll 使用此集合执行其他操作时引发的相同错误,例如: var count = myEnumerable.Count(); 在visualstudio中,我试图查看此
IEnumerable
,当我试图在数组中转换它时:
var arr = myEnumerable.ToArray();
我有一个错误:
An unhandled exception of type 'System.StackOverflowException' occurred in System.Core.dll
使用此集合执行其他操作时引发的相同错误,例如:
var count = myEnumerable.Count();
在visualstudio
中,我试图查看此集合的属性,但当我将鼠标置于其上时,调试模式结束
我修复了这个问题,删除了IEnumerable
,只使用Array
。
但我不明白的是。我的代码被try catch
覆盖,但我无法处理此异常。
在meny中,我读到我无法处理非用户代码中触发的StackOverflowException
这是否意味着我们所能做的只是修复错误,而不是试图捕获StackOverflowException
?你没有-基本上,StackOverflowException
是一个致命错误。你抓不到它;你需要修复你的代码
即使您可以捕获到StackOverflowException
,它仍然会指示一个应该修复的bug,有点像NullReferenceException
所做的那样
您应该了解如何评估序列。例如,如果您有一个使用递归调用的yield-return
的朴素树遍历算法和一个deep-tree,则可能会出现此错误
StackOverflowException
几乎总是涉及递归,修复几乎总是涉及要么完全删除递归,要么大幅减少所需的递归量。您不知道-AStackOverflowException
基本上是一个致命错误。你抓不到它;你需要修复你的代码
即使您可以捕获到StackOverflowException
,它仍然会指示一个应该修复的bug,有点像NullReferenceException
所做的那样
您应该了解如何评估序列。例如,如果您有一个使用递归调用的yield-return
的朴素树遍历算法和一个deep-tree,则可能会出现此错误
StackOverflowException
几乎总是涉及递归,修复几乎总是涉及要么完全删除递归,要么大幅减少需要多少递归。你无法处理这个事实。SOE可以在任何代码中引发,但不一定(或很可能)是ToArray()调用导致了它。使用调试器单步执行代码中的递归错误,注意调用堆栈。您的IEnumerable
到底是什么?它只是一个列表吗?或者它是一个自定义类,您是否编写了枚举数?可能重复:。您无法处理该事实。SOE可以在任何代码中引发,但不一定(或很可能)是ToArray()调用导致了它。使用调试器单步执行代码中的递归错误,注意调用堆栈。您的IEnumerable
到底是什么?它只是一个列表吗?或者它是一个自定义类,您是否编写了枚举数?可能重复:。