我遇到了一个相当奇怪的小问题。
在以下代码中,我无法理解e
可以null
;
try
{
//Some Code here
}
catch (Exception e)
{
//Here e is null
}
据我所知,throw null
将转换为throw new NullReferenceException()
。
问题似乎与多线程有关,因为删除另一个线程似乎也解决了这个问题。或者至少我在上面的代码在新线程中运行时才看到这个。整个程序使用很多线程,有点复杂。
无论如何,我的问题是,e
怎么可能为空? - 希望答案可以帮助找到问题的根源。
修改 我发现它,因为它在catch语句中引起了NullReferenceException,并且使用调试器我看到了同样的事情。
编辑2 第二天打开VisualStudio再次尝试,没有代码更改,现在相同的catch短语被“调用”,但这次e不是null。看起来这是一个VS故障。
答案 0 :(得分:7)
你如何确定e实际上是空的?我已经尝试了一些示例并通过CLI规范读取异常,但它似乎不允许异常值为null。此外,如果它为null,则它将没有类型,因此无法满足类型异常的过滤条件。
您是否使用调试器来验证此值?如果是这样,请尝试将其切换为内联断言。
答案 1 :(得分:2)
你是肯定你是不是在Exception e line?
try
{
//Some Code here
}
catch (Exception e)
{
int i = 0; // breakpoint here
}
我只是问这个,因为我从来没有见过这种行为,我知道如果你断点异常e,e似乎是空的。在下一行,它变为非空。
答案 2 :(得分:1)
抛出的异常可能不符合CLS标准,而使用过滤器的Try / Catch确实无法捕获该异常。
你应该只能通过try {} catch {}捕获符合CLS标准,没有例外“参数”
答案 3 :(得分:0)
我也有同样的情况。它恰好是Eclipse调试器的一个bug。 Eclipse重启就足够了 - 运行时异常变得正常,而不是空。