vb.net – 捕获常规异常时,如何确定原始异常类型?
发布时间:2020-12-17 07:26:30 所属栏目:百科 来源:网络整理
导读:在.NET中捕获异常时,您可以根据需要拥有尽可能多的特定于类型的异常块.但我通常会尝试至少有一个“常规”异常catch块.但有没有办法获得抛出通用异常处理程序捕获的“真正”异常的类型,也许使用反射? 例如,如果我有 Catch ex As System.ServiceModel.FaultEx
在.NET中捕获异常时,您可以根据需要拥有尽可能多的特定于类型的异常块.但我通常会尝试至少有一个“常规”异常catch块.但有没有办法获得抛出通用异常处理程序捕获的“真正”异常的类型,也许使用反射?
例如,如果我有 Catch ex As System.ServiceModel.FaultException(Of InvalidUser) ProcessModuleLoadException(Me,ex) Catch ex As System.ServiceModel.FaultException(Of SQLExceptions) ProcessModuleLoadException(Me,ex) Catch ex As System.ServiceModel.FaultException(Of DataNullReference) ProcessModuleLoadException(Me,ex) Catch ex As System.ServiceModel.FaultException ProcessModuleLoadException(Me,ex) Catch ex As Exception ProcessModuleLoadException(Me,ex) (我已经将它们分解出来进行调试,即使我对每个异常做同样的事情). 简而言之,在“Catch ex As System.ServiceModel.FaultException”中,我想检查“ex”并获取异常的基本“真实”类型,或者作为一种类型(主要用于调试,所以我可以添加另一个catch块)或者作为字符串(用于记录). 但是,在Catch块中,“ex”已经被强制转换为它的父类,因此任何原始属性和有关原始异常的信息似乎都会丢失. 建议? 解决方法
即使Exception已经转换为其父类,您仍然可以调用
GetType 来获取其底层具体类型(请原谅我的C#):
try { // Do stuff } catch(Exception ex) { Type exceptionType = ex.GetType(); } 如果这仅用于诊断目的,您可以记录ex.ToString(),默认情况下包括底层类型(除了堆栈跟踪等),如下所示: System.ArgumentException: lastName at Tests.Program.Main(String[] args) in ...Program.cs:line 22 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |