【问题标题】:Why am I receiving this NullReferenceException error when testing for null?为什么在测试 null 时收到此 NullReferenceException 错误?
【发布时间】:2012-03-15 13:48:50
【问题描述】:

我收到以下代码行的错误:对象引用未设置为对象的实例。

if (Session["AutoCompleteCustomersPhone"] != null)

完整的代码块:

if (Session["AutoCompleteCustomersPhone"] != null)
    earchCustomerPhone = true;
else
{
    searchCustomerPhone =
        bool.Parse(Session["AutoCompleteCustomersPhone"].ToString());
}

为什么在对 null 的测试中,我收到此错误?

【问题讨论】:

  • 很可能,Session 本身就是null
  • 这段代码到底在哪里运行?它可能会给我们一个线索,为什么 Session 为空......
  • 这是在 ASMX Web 服务还是 WCF 中?

标签: c# asp.net web-services


【解决方案1】:

您的if 声明是错误的。如果它 is 为空,则您正在尝试使用该值。

改变这个:

if (Session["AutoCompleteCustomersPhone"] != null)

到这里:

if (Session["AutoCompleteCustomersPhone"] == null)

我会先解决这个问题,看看是否能解决问题。

来自特定行的异常可能是因为:

  • Session 变量为空 - 您可以在调试器中验证这一点。
  • 您的编译代码与您用于调试的源代码不同。尝试清洁和重建。

【讨论】:

  • +1 好地方,但这不会导致这一特定行的异常。
  • @greg84 在 else 中是的,但很好奇为什么在 if 中报告了异常,因此我修改了“在此特定行”。
  • 这就是为什么使用“非”逻辑编写 if 语句会给人们带来麻烦。 @Mark 是正确的,你的 if 语句是向后的。
  • 我最初尝试过这个,但它失败了。所以我切换到 != 当那不起作用时,我发布了这个问题。不过谢谢!
  • @Kevin 切换它只会使您的代码在逻辑上不正确。发生异常时,您可以查看当前范围内的每个变量中的值。如果其中任何一个为空,则该值将声明为空。检查您的 Session 对象。
【解决方案2】:

因为 sessionn 对象本身为空

我认为您正在使用网络服务,这就是会话为空的原因*

如果您在 web 服务中使用会话,请查看这篇文章: Using Session State in a Web Service

【讨论】:

  • 你确实是对的。它是一个网络服务。我想我的下一个问题是是否可以在 Web 服务中使用 Session?那是一个不同的话题。谢谢。
  • @Kevin - 检查我粘贴的文章链接解决您的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多