【发布时间】:2012-10-06 01:01:49
【问题描述】:
我在我的一种方法的开头有一个非常简单的检查,如下所示:
public void MyMethod(MyClass thing)
{
if(thing == null)
throw new ArgumentNullException("thing");
//Do other stufff....
}
但是我得到了堆栈跟踪(来自生产环境中的 Elmah),这似乎表明“if(thing == null)”行正在引发 NullReferenceException。堆栈跟踪的前 2 行类似于:
System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at MyLibrary.BL.AnotherClass.MyMethod(MyClass thing) in C:\Development\MyProject\trunk\MyLibrary.BL\AnotherClass.cs:line 100
MyClass 是一个相当简单的类,没有运算符重载或类似的东西,所以我对抛出 NullReferenceException 的原因有点困惑!
任何人都可以提出可能导致这种情况的场景吗?
编辑:我怀疑“事物”可能为空,但我真的希望 ArgumentNullException 而不是 NullReferenceException - 这基本上就是这个问题的意义所在。是否有框架或 Elmah 正在更改或错误报告异常 - 或者是二进制文件在某种程度上已过时的唯一解释?
【问题讨论】:
-
您发布的错误还显示
HttpUnhandledException。这是从哪里来的,-->是什么意思? -
如果您刚刚添加了此检查,请确认您的站点使用最新的二进制文件。为了避免潜在的过载问题,总是有
object.ReferenceEquals。 -
@SimpleCoder:这只是 Elmah 的堆栈跟踪的第一行 - 我已经编辑了问题以包含下一行。注意源文件中的第 100 行是 if 语句。
-
@AntonTykhyy:不,我已经在我们的源代码控制中查看了这个文件,并且检查一直都在适当的位置......这就是我如此困惑的原因。
-
与其依赖于抛出哪些未处理的异常并查看消息,不如调试您的应用程序并验证一切都如您所声称的那样是。