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
几乎总是涉及递归,修复几乎总是涉及要么完全删除递归,要么大幅减少所需的递归量。

您不知道-A
StackOverflowException
基本上是一个致命错误。你抓不到它;你需要修复你的代码

即使您可以捕获到
StackOverflowException
,它仍然会指示一个应该修复的bug,有点像
NullReferenceException
所做的那样

您应该了解如何评估序列。例如,如果您有一个使用递归调用的
yield-return
的朴素树遍历算法和一个deep-tree,则可能会出现此错误


StackOverflowException
几乎总是涉及递归,修复几乎总是涉及要么完全删除递归,要么大幅减少需要多少递归。

你无法处理这个事实。SOE可以在任何代码中引发,但不一定(或很可能)是ToArray()调用导致了它。使用调试器单步执行代码中的递归错误,注意调用堆栈。您的
IEnumerable
到底是什么?它只是一个
列表吗?或者它是一个自定义类,您是否编写了枚举数?可能重复:。您无法处理该事实。SOE可以在任何代码中引发,但不一定(或很可能)是ToArray()调用导致了它。使用调试器单步执行代码中的递归错误,注意调用堆栈。您的
IEnumerable
到底是什么?它只是一个
列表吗?或者它是一个自定义类,您是否编写了枚举数?可能重复:。