c# - 捕获的异常如何为 null(不是 NullReferenceException)?

标签 c# .net multithreading exception exception-handling

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

在下面的代码中,我无法理解 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/

相关文章:

javascript - 统一: AddExplosionForce to 2D

c# - 如何在 WinForms 中等待信号同时监听事件?

java - 在 Swing 中按下按钮之前阻止流程继续进行

c++ - std::thread 和异常处理

c# - ebay API - 从拍卖列表中获取 UPC

c# - 将 XML 解析列表从 Controller 传递到 ASP.NET MVC 中的 View

c# - 如何将字符串值转换为 int,使其不跳过前面的 0?

.net - PE Headers 的哪个字段表明 PE 文件是否有效?

c# - 通过PowerShell使我的C#应用​​程序可管理

c# - WPF 列表框在 SelectedItem 之后显示下一个元素