繁体   English   中英

未指定异常类型时从try catch读取异常

[英]Reading exception from try catch when exception type not specified

在您使用try catch块的情况下。

try {
    //Do my work!
} 
catch 
{
    //Handle my exception
}

有没有办法在catch块中引用异常对象?

即:

try {
    //Do my work!
} 
catch 
{
    //Handle my exception
    MyUndefinedExceptionObject.Message ????
}

编辑:我认为我不够清楚。 我知道如何使用try catch块捕获异常。 我想知道的是,你有能力不为你的异常指定一个类型但是声明块在这种情况下仍然有一些方法来检索异常对象吗? 从你的答案判断,但我认为没有?

您需要捕获您关心的异常类型。 执行此操作后,您将可以访问该异常的所有属性。

try
{
    //Do my work!
} 
catch (MyExceptionType e)
{
   string s = e.Message;
}

这是MSDN中的一个参考,以加快速度。

关于编辑:除非在catch语句中明确指定了异常,否则无法访问抛出的异常。

是的,像这样:

try 
{
    //Do my work!
} 
catch (mySpecificException myEx)
{
    //Handle my exception
}
catch (Exception ex)
{
    //Handle my exception
}

(最具体到最不具体)

没有。

使用裸catch表示您不关心实际异常,否则,为什么不使用

catch (System.Exception ex)

抓住任何例外? 当然,您应该只捕获您将处理的异常。

您需要指出要捕获的特定异常类型,并将其分配给变量。

改为使用此语法:

try 
{
    // Do work
}
catch (MyUndefinedExceptionObject ex)
{
    Debug.WriteLine(ex.Message);
}

您还可以包含多个 catch块,并相应地更改异常类型。 但是,请记住,您应始终从大多数派生到最少派生的顺序排序,以所有异常的基类结束, System.Exception

您通常也应该避免捕获System.Exception ,而只是优先捕获可以在catch块中处理的派生异常,并且不会破坏程序的状态。 捕获System.Exception类是一个坏主意,因为您还将捕获无法处理的异常,例如OutOfMemoryExceptionStackOverflowException

Microsoft在此处提供了有关最佳实践的有用文章: 处理异常的最佳实践

暂无
暂无

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

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