在我的代码中,我有一个int类型的变量。在初始化之后,我收到一个NullReferenceException。我很难过为什么会这样,实际上甚至可能如此。
以下是代码:
int lookupValue = 0;
if (0 == lookupValue)
这是调试器屏幕。 lookupValue的值实际上是0。
答案 0 :(得分:3)
调试器显示错误的行作为异常源。有时会发生这种情况,您需要密切关注周围的代码和堆栈跟踪。
由于您正在使用Web应用程序,调试信息很可能与代码不同步。重建整个项目可能会有所帮助,除非你的依赖关系安排得很糟糕。
在比较之前查看代码,在它下面查看代码(Session
是否为空?Session.UserId
是否为空?是SqlCommands.LookupInsertCommand
抛出NullReferenceException
?)。您可以使用快速手表来检查代码片段并找到导致NullReferenceException
。
作为附注,尽量不要将其他语言的做法带到C#。初始化局部变量当你实际上有一个合理的值用初始化它们时 - 不用担心,编译器不会允许你编译代码读取尚未分配的变量。当您只是分配默认值时,您将失去对代码的一些完整性检查。另外,不要比较constant == variable
。没有理由在C#中这样做,因为你不能偶然输入variable = constant
- 它不会编译(唯一的例外是bool
类型,但你不应该&# 39; t无论如何将它与常数进行比较 - 只需if (boolValue)
或if (!boolValue)
)。它只会使代码更难阅读和理解。
修改强>
如果您知道自己在寻找什么,这个案例尤其明显。你看,if (0 == lookupValue)
并不存在于编译二进制文件的任何地方 - 编译器可以安全地忽略它,因为lookupValue
总是是0
。通常,调试信息会解释这一点,但是缺少一行是很常见的,即使没有像整个缺失的代码行那样严重(在你的情况下,可能不止一行)。
由于您正在使用ASP.NET应用程序,因此部分代码实际上并未由Visual Studio编译 - 在您发出请求时会对其进行编译。要生成正确的调试信息,您还必须在 <compilation debug="true" />
(Compilation element)中设置web.config
。
答案 1 :(得分:-3)
您的代码中没有错误。无论如何试试这个...
if (lookupValue.CompareTo(0) == 0)