区分相同类型的异常

本文关键字:异常 同类型 | 更新日期: 2023-09-27 18:26:57

区分两个类型相同但因不同原因引发的异常的最佳方法是什么。

例如,InvalidOperationException可以在尝试访问空序列时抛出,但也可以在使用Concurrent对象(例如BlockingCollection)时抛出

根据我的阅读,我得出的结论是,使用BlockingCollection.CompleteAdding()来表示完成是完全可以的,因此需要捕获异常并进行适当处理(例如退出任务)

在不必使用消息内容的情况下过滤这些消息的最佳方法是什么?

编辑:它们似乎都具有相同的HResult值。

区分相同类型的异常

AFAIK您只能通过Message来区分同一Type的两个Exception

但是,您不应该依赖Message来做出Catch决策。Message可能会根据您执行代码的系统的区域设置进行本地化。如果系统的语言与您硬编码的Message的语言不同,这将使您的Catch When块不相关。

您可以使用Message的唯一情况是,当您是系统管理员并为您将要管理的服务器编写软件时,并且您确信您使用的语言将来不会更改(当您为编写在客户端设备上运行的软件时,无法保证这一点)。

我遇到了一个类似的同类型异常问题,但我无法捕捉到,因为它们是在一段我无法访问的代码中抛出的。我的解决方案是通过异常的Source和TargetSite来区分。这感觉有点像一个肮脏的修复,但它是有效的。

相关文章: