我正在用 C# 做一些业余爱好项目,这是一种我不太了解的语言,并且偶然发现了以下内容:
假设您有一个使用 BackgroundWorker 实现的异步操作。现在,如果出现异常,将引发事件 RunWorkerCompleted 并且 RunWorkerCompletedEventArgs.Error 将为非空。
下面是处理不同异常类型的规范方法吗? (这里所有的异常种类都是兄弟WRT继承)
if (e.Error != null)
{
FirstKindOfException e1 = e as OneKindOfException;
SecondKindOfException e2 = e as SecondKindOfException;
...
LastKindOfException en = e as LastKindOfException;
if (e1 != null)
{
...
}
else if (e2 != null)
{
...
}
...
else
{
...
}
}
它有效,但是......感觉不对。
最佳答案
您可以使用 is
来保持每个测试的严格范围:
if (e.Error is FirstKindOfException )
{
...
}
else if (e.Error is SecondKindOfException)
{
...
}
(如果你想从异常中得到特殊值,然后重新转换)
但老实说,我很少需要处理很多 不同类型的异常。在大多数情况下,只需恢复(补偿)到已知状态并适本地报告错误就可以了。一般来说,我更喜欢在开始操作之前测试可能的错误,所以异常确实是异常的东西。
关于c# - 如何区分 BackgroundWorker.RunWorkerCompleted 事件处理程序中的不同异常类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881458/