我编写的代码覆盖了对象的Equals。 在我写完之后,我意识到我将要使用StackOverFlowException,因为我还没有实现IEquatable接口来处理最后一行代码。然而,我运行代码来查看发生了什么,并且发生了一些奇怪的事情,您可以在下面的图像中看到自己:
此时断点甚至无法打击,似乎代码在我的程序运行之前就被使用了。这是由CLR完成的吗?是别的吗?
感谢您的帮助!
答案 0 :(得分:2)
上的筹码已经耗尽(最后一根破坏骆驼的稻草)
if (ReferenceEquals(right, null))
可能,堆栈没有另外4(8)个字节来存储right
。
实际原因似乎是
return Equals(right as Quality)
如果right
属于Quality
类型,则代码注定会一次又一次地调用Equals