catched异常如何为null(不是NullReferenceException)?

Jac*_*rdt 5 .net c# multithreading exception-handling exception

我遇到了一个相当奇怪的小问题.

在下面的代码中我无法理解怎么e可能null;

try
{
    //Some Code here
}
catch (Exception e)
{
    //Here e is null
}
Run Code Online (Sandbox Code Playgroud)

据我所知,throw null将转换为throw new NullReferenceException().

问题似乎与多线程有关,因为删除另一个线程似乎也解决了它.或者至少我在上面的代码在新线程中运行时才看到这个.整个程序使用很多线程,有点复杂.

无论如何我的问题是,怎么可能e是null? - 希望答案可以帮助找到这个问题的根源.

编辑 我发现它,因为它在catch语句中引起了NullReferenceException,并且使用调试器我看到同样的事情.

编辑2 第二天打开VisualStudio再次尝试,没有代码更改,现在相同的口号被"调用",但这次e不是null.看起来这是一个VS故障.

Jar*_*Par 7

你如何确定e实际上是空的?我已经尝试了一些示例并通过CLI规范读取异常,但它似乎不允许异常值为null.此外,如果它为null,则它将没有类型,因此无法满足类型异常的过滤条件.

您是否使用调试器来验证此值?如果是这样,请尝试将其切换为内联断言.

  • @Lillemanden,但这并不能证明它是空的.只有Debug.Assert(e!= null,"它绝对是null")或类似的检查才能做到这一点. (3认同)
  • 调试器有时会说谎.我记得有一些有趣的常量和调试器,它们看起来是空的或当它们不存在时为空. (2认同)