我遇到了一个很奇怪的小问题。
在下面的代码中,我无法理解 e
怎么可以是 null
;
try
{
//Some Code here
}
catch (Exception e)
{
//Here e is null
}
据我所知,throw null
将被转换为throw new NullReferenceException()
。
这个问题似乎与多线程有关,因为删除另一个线程似乎也能解决问题。或者至少我只在上面的代码在新线程中运行时才看到这一点。整个程序使用了很多线程,有点复杂。
无论如何,我的问题是,e
怎么可能为空? - 希望这个问题的答案可以帮助找到这个问题的根源。
编辑 我发现它是因为它在 catch 语句中导致了 NullReferenceException,并且使用调试器我看到了同样的事情。
编辑 2 第二天打开 VisualStudio 再次尝试,没有代码更改,现在“调用”了相同的标语,但这次 e 不为空。看起来这是一个 VS 故障。
最佳答案
您如何确定 e 实际上为 null?我已经尝试了一些示例并通读了有关异常的 CLI 规范,它似乎不允许异常值为 null。此外,如果它为 null,则它将没有类型,因此将无法满足类型异常的过滤条件。
您是否使用调试器来验证此值?如果是这样,请尝试将其切换为内联断言。
关于c# - 捕获的异常如何为 null(不是 NullReferenceException)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1841496/