有没有办法找出是什么特定对象导致了NullReferenceException
?我已经阅读了有关 troubleshooting NullReferenceException
s 的页面它讨论了在调试器中检查变量并查看异常消息。
如果在生产代码中抛出异常导致您无法运行调试器来检查变量怎么办?异常消息显示了堆栈跟踪,因此您可以看到在哪个方法中引发了异常,但它没有说明哪个特定对象是 null
。
我希望能够将 null
对象的名称添加到错误消息中,这样当我查看用户的报告时,我会遇到一个 NullReferenceException
,我可以很容易地看到什么对象是 null
并修复它。有谁知道这样做的方法吗?
我还找到了this question它问了同样的问题,但那是从 2011 年开始的,我不知道从那时起是否有任何变化。
编辑:The question这被标记为重复确实是重复但也很旧(2008)。从那以后有什么改变吗?
编辑 2:我找到了 this在谷歌搜索这个问题时。 Visual Studio 可以告诉您是什么引发了 NullReferenceException
;有什么方法可以利用它来将其添加到日志文件中吗?
最佳答案
鉴于堆栈跟踪,应该相对容易弄清楚,但更好的方法是在代码中包含“验证”或参数和/或空检查,并在之前显式抛出一个 ArgumentNullException
您尝试访问可能尚未初始化的变量的成员。然后您可以提供未初始化对象的名称:
if (obj == null)
throw new ArgumentNullException(nameof(obj));
对构造函数和方法中的参数执行这些检查是一种常见的做法,例如:
public void SomeMethod(SomeType someArgument)
{
if (someArgument == null)
throw new ArgumentNullException(nameof(someArgument));
//you will never get there if someArgument is null...
var someThing = someArgument.SomeMember;
if (someThing == null)
throw new ArgumentException("SomeMember cannot be null.", nameof(someArgument));
...
}
关于c# - 你能捕获抛出 NullReferenceException 的对象的名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55419825/