区分相同类型的异常
本文关键字:异常 同类型 | 更新日期: 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来区分。这感觉有点像一个肮脏的修复,但它是有效的。