C# 为什么在函数执行之前会出现stackoverflow异常?
我编写了覆盖对象的等号的代码。 在我写了它之后,我意识到我将使用StackOverFlowException,因为我还没有实现IEquatable接口来处理最后一行代码。然而,我运行代码来查看发生了什么,一些奇怪的事情发生了,您可以在下图中看到: 断点此时甚至不可命中,似乎代码在我的程序运行之前就已经被使用了。这是CLR所做的事情吗?是别的吗 谢谢你的帮助 骆驼背上的最后一根稻草(骆驼背上的最后一根稻草)累坏了 堆栈可能没有其他4(8)个字节来存储C# 为什么在函数执行之前会出现stackoverflow异常?,c#,stack-overflow,C#,Stack Overflow,我编写了覆盖对象的等号的代码。 在我写了它之后,我意识到我将使用StackOverFlowException,因为我还没有实现IEquatable接口来处理最后一行代码。然而,我运行代码来查看发生了什么,一些奇怪的事情发生了,您可以在下图中看到: 断点此时甚至不可命中,似乎代码在我的程序运行之前就已经被使用了。这是CLR所做的事情吗?是别的吗 谢谢你的帮助 骆驼背上的最后一根稻草(骆驼背上的最后一根稻草)累坏了 堆栈可能没有其他4(8)个字节来存储右侧的。 实际原因似乎是 return E
右侧的。
实际原因似乎是
return Equals(right as Quality)
如果右侧
为质量
类型,则该代码注定会一次又一次地调用等于
,您的制动点将永远不会被击中。它的内部是白色的(不是红色的,上面有警告),因此代码与正在运行的probram不匹配。重建您的解决方案。您是否实现了IEquatable
接口?看看这个接口可能会有帮助@Dovydas Sopa-这不是问题,它是在生成之后。@Alessandro D'Andria-是的,您是对的,修复了它。如果我知道递归部分在哪里,它可以通过该行旁边的标记来显示。这不是我的问题。问题是为什么没有找到断点。我希望,即使它是一个无休止的递归函数,我也会在第一次调用Equals时命中断点。@Moti Berger:堆栈正在消耗,在某个时候,它最终耗尽了:堆栈无法再分配4/8字节。最后的打击可能发生在某个随机/奇怪的点上。我知道在无限递归调用中,堆栈最终会耗尽,但要耗尽堆栈,函数的代码必须至少运行一次,所以为什么没有命中断点。某些不是我的代码的东西,在我的代码运行之前,一定使用了Quality类型的Equals函数!我的问题是谁使用了这个函数。程序在启动前就崩溃了!
return Equals(right as Quality)