【问题标题】:C# doesn't throw NullReferenceException at developer machineC# 不会在开发人员机器上抛出 NullReferenceException
【发布时间】:2017-04-20 08:28:25
【问题描述】:

我的代码如下所示:

public partical class frmXXX : Form
{

  SomeObject foo = null;

  public void XYZ()
  {
    foo.ABC.DEF(foo.XXX, foo.YYY, foo.ZZZ);
    somethingElse();
  }

  ...

}

看来我有一个错误,当foo 为空时,我调用了XYZ()。该程序在客户处因 NullReferenceException 而崩溃,这是我所期望的。但是,在我的开发机器上,我没有收到异常。我还用调试器验证了 foo 实际上是空的。调试器说它是空的。

一旦调用了空对象,方法就会结束,所以somethingElse();不会被调用。这就像一个无声的例外。是否有可能是我的开发机器配置错误,或者我是否启用了某些功能?

【问题讨论】:

  • 检查与调试异常设置?
  • 在抛出/未处理中断方面,您是如何配置异常的,特别是对于 System.NullReferenceException
  • 在哪里可以找到这些设置?我对 C# 很陌生
  • 什么是public ==>partical<== class

标签: c# nullreferenceexception


【解决方案1】:

Cntrl + Alt + E(或Debug -> Exceptions或在VS2017中Debug -> Windows -> Exception Settings) 选择Reset All,这将返回默认异常。

还要确保选中Just My Code。您可以在 Debug -> Options 下找到它。这将带您进入 Debugger -> General 选项。您可以在此处查看Just My Code

【讨论】:

  • 谢谢!虽然我必须明确检查 "Common Language Runtime Exceptions" --> System.NullReferenceException 。看来这种异常在 Visual Studio 2015 中默认被忽略了! (这有点令人震惊)
【解决方案2】:

您是否尝试将 TryCatch 用于此:

public void XYZ()
  {

///try here
{
        foo.ABC.DEF(foo.XXX, foo.YYY, foo.ZZZ);
}
  ///catch
{
   return error here................
}
    somethingElse();
  }

【讨论】:

    【解决方案3】:

    您可能将异常设置设置为非默认设置。 here 是一个有用的链接,可帮助您了解如何恢复默认设置以及如何根据需要调整设置。

    您可以在 vs 2015 - 2017 上使用 Ctrl + Alt + E 检查您的设置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多