获取 NullReferenceException 的变量名

Getting the variable name for NullReferenceException

NullReferenceException 的堆栈跟踪信息非常少,它们仅包括方法名称和调用堆栈。方法中的任何变量都可以为空,并且当错误在开发机器上不可重现时很难调试。

您是否知道获取有关该错误的更多信息的方法,也许是获取变量名称?或者你有更好的调试方法吗?

并非总是可以跟踪该名称(它可能是一个表达式)。
在可能的情况下,它会产生不可接受的开销。考虑到运行时必须跟踪几乎所有引用变量,这将是昂贵的并且禁止各种优化。

另请参阅我在 Inspect the managed stack 上的回答及其引用的博客 post。

简单的解决方案是在您自己的代码中构建更一致的空值检查:

void Foo(Bar b)
{
   if (b == null) throw new ArgumentNullException(nameof(b));

   ...
}