catchedexception如何为null(不是NullReferenceException)?

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

在下面的代码中,我无法理解e如何为null ;

 try { //Some Code here } catch (Exception e) { //Here e is null } 

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

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

无论如何我的问题是,如何才能为空? – 希望答案可以帮助找到这个问题的根源。

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

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

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

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

你是否积极参与Exception e系列?

 try { //Some Code here } catch (Exception e) { int i = 0; // breakpoint here } 

我只问这个,因为我从来没有见过这种行为,我知道如果你断点exceptione,e似乎是空的。 在下一行,它变为非空。

抛出的exception可能不是CLS Compliant,它实际上不应该被带filter的Try / Catch捕获。

你应该只能通过try {} catch {}捕获符合CLS标准,没有exception“参数”

我也有同样的情况。 它恰好是Eclipse调试器的一个bug。 Eclipse重启就足够了 – 运行时exception变得正常,而不是null。