【发布时间】:2018-02-25 01:43:20
【问题描述】:
所以我在 Visual Studio 中遇到了一些奇怪的错误。调试器崩溃(我认为)。这是它崩溃的功能。这是针对 C# 中的通用 BST,其中 == 运算符被重载以添加节点之间的轻松比较。
public static bool operator ==(Node<T> lhs, Node<T> rhs)
{
if ((lhs == null) || (rhs == null))
{
return false;
}
if((lhs.Data).CompareTo(rhs.Data) == 0)
{
return true;
}
else
{
return false;
}
}
它在这一行崩溃:
if ((lhs == null) || (rhs == null))
调试时,lhs确实为null,一开始比较就挂了,然后显示这个信息:
然后调试会话会自行结束。
我不太明白,因为为了找出我的代码的问题,我正在尝试调试,但随后发生了此错误,会话自行结束。我以前从未见过这种情况。
【问题讨论】:
-
试试
if (lhs.Equals(null) || rhs.Equals(null)),我认为你正在启动一些无限递归。 -
堆栈溢出。使用
ReferenceEquals(lhs, null) || ReferenceEquals(rhs, null)否则您将递归调用 == 运算符。 -
@RonBeyer 如果其中一个为空,则会抛出空引用异常
-
在我超载的
operator ==中,我做的第一件事就是使用==。你认为这里会发生什么? -
@KenWhite 我猜它让我感到困惑的原因是因为我在重载运算符中使用的两种类型是 Node
和 Node ,我并没有真正考虑 null a Node ,所以我认为它不会递归调用重载运算符。我想它可能会使用默认的 == 进行比较。我最终包含了一个引用等于比较,然后检查其中一个是否为空,最后比较值。
标签: c# visual-studio debugging