繁体   English   中英

如何找到在C#中引发的异常的异常类型?

[英]How do I find the exception type of an exception that gets thrown in C#?

我使用的图书馆似乎没有记载例外情况。 该库用于与公司生产的产品进行通信。 我希望能够区分抛出的异常,但是我不知道异常的名称(例如,在通信超时或欠压情况之间)。

他们所有的示例仅使用catch(Exception ex) 我怎样才能找到捕获单个错误所需的内容? 当我执行ex.toString() ,会得到如下信息:

System.Exception: Timeout
    at CMLCOMLib.EcatObj.Initialize()
    at copley_cmo_test.MainWindow.btnConnect_Click(Object sender, RoutedEventArgs e)
in c:\Users\adam.siembida\Desktop\copley_cmo_test\copley_cmo_test\MainWindow.xaml.cs:line 41

这个:

System.Exception: Timeout

表明他们只是抛出一个空的System.Exception ,例如

if (weHaveNoApiDesignSkills)
{
    throw new Exception("Timeout");
}

可能有一些例外情况设计得更好,但您所展示的例外情况并不乐观:(

不幸的是,除非您开始在异常中使用消息来区分它们(这几乎总是一个坏主意),否则您将陷入困境。 也许值得图书馆的作者问一下,他们是否可以改善将来的发行版。

ex.GetType()例如catch(Exception ex)捕获它,然后检查ex.GetType()返回的Type 如果等于typeof(Exception) ,则意味着它们没有抛出比Exception更具体的东西。

顺便说一句,如果在捕获到异常时(即在catch块中)停止了您的操作,则在监视窗口中输入$exception时,您将看到整个异常。

如果未正确记录正在使用的库中的API,则应捕获基本异常并不仅将消息记录下来,还应将异常转换为字符串,从而记录整个异常。 例如。

   try
   {
       //api call which throws exception.
   }
   catch(Exception ex)
   {
       //log ex.ToString();       
   }

使用反编译器,例如:

http://www.jetbrains.com/decompiler/

在.net中,没有像Java中那样的显式异常声明,因此我认为这是唯一的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM