Chr*_*ubb 6 vb.net reflection exception-handling exception try-catch
当捕获.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)
Run Code Online (Sandbox Code Playgroud)
(我已经打破了他们的调试,即使我做每个异常的同样的事情).
总之,在"抓住EX作为System.ServiceModel.FaultException"我要检查"EX",并获得基地"真正的"类型的异常,无论是作为一个类型(主要用于调试,所以我可以添加其他的catch块)或作为字符串(用于记录).
但是,在Catch块中,"ex"已经被强制转换为它的父类,因此任何原始属性和有关原始异常的信息似乎都会丢失.
建议?
Jef*_*nal 16
即使Exception已经转换为其父类,您仍然可以调用GetType 以获取其基础具体类型(请原谅我的C#):
try {
// Do stuff
}
catch(Exception ex) {
Type exceptionType = ex.GetType();
}
Run Code Online (Sandbox Code Playgroud)
如果这仅用于诊断目的,您可以记录ex.ToString(),默认情况下包括基础类型(除了堆栈跟踪等),如下所示:
System.ArgumentException: lastName
at Tests.Program.Main(String[] args) in ...\Program.cs:line 22
Run Code Online (Sandbox Code Playgroud)