如果方法是运算符,如何找到调用 c# class 方法的代码?

How to do I find the code calling a c# class method if the method is an operator?

我是 c# 和 visual studio 的新手,所以我不知道很多用于调试的技术。

代码在此方法上触发异常:

public static implicit operator T(RangeNode<T> node)
{
    return node.Value;
}

"return node.Value;" 区域用 NullReferenceException 突出显示,我可以看到传入的 'node' 是 null。

为了修复它,我需要找到调用代码并查看为什么它传递的是空值。

通常在 Visual Studio 中,我可以通过单击函数签名上方的 "X references" 助手来查看调用它的内容,但它不会出现在该运算符方法中。知道如何找到调用代码吗?

当执行你的程序时,在 public static implicit operator T(RangeNode<T> node) 中放置一个断点,并确保你有 Visual Studio 的 Call Stack window:

然后往下看这个window:

现在,您可以单击调用堆栈中的任何方法调用,查看谁调用了此方法以及传递给它的参数。

当您 运行 Visual Studio 处于调试模式时,当您像现在这样遇到异常时,您的代码基本上会暂停执行。发生这种情况时,您需要查看调用堆栈——这是您嵌套的每个函数,从入口函数(通常为 Main)一直到您在运算符中的位置。到了这里,你就有能力遍历调用栈了。

要确保它已打开,请转至 DEBUG > Windows > Call Stack。它会突出显示或打开它,通常在屏幕底部。当您中断异常时,您当前所在的函数将位于堆栈的顶部,并且旁边应该有一个箭头。它正下方的函数是使用此运算符的函数。如果单击它,它将带您到使用运算符的确切行。

使用调用堆栈进行调试是一个非常有用的工具!