gpt4 book ai didi

vb.net - 捕获一般异常时,如何判断原始异常类型?

转载 作者:行者123 更新时间:2023-12-02 06:30:56 25 4
gpt4 key购买 nike

在 .NET 中捕获异常时,您可以根据需要拥有任意数量的特定于类型的异常 block 。但我通常尝试至少有一个“通用”异常捕获 block 。但是有没有办法获取通用异常处理程序捕获的“真实”异常的类型,也许使用反射?

例如,如果我有

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”并获取异常的基本“真实”类型,或者作为类型(主要用于调试,以便我可以添加另一个捕获) block )或作为字符串(用于日志记录)。

但是,在 Catch block 内,“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

关于vb.net - 捕获一般异常时,如何判断原始异常类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2043309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com