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

时间:2011-04-18 07:30:13

标签: c# exception exception-handling try-catch

如果您使用try catch块。

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

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

即:

try {
    //Do my work!
} 
catch 
{
    //Handle my exception
    MyUndefinedExceptionObject.Message ????
}
  编辑:我认为我不清楚   足够。我知道会怎么样   通常使用try来捕获异常   抓住了。我在想的是   鉴于你有能力不   为您的例外指定一种类型   声明块还有一些   检索异常对象的方法   在这种情况下?从你的答案判断   但我认为没有?

4 个答案:

答案 0 :(得分:6)

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

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

这是一个reference in MSDN,以加快速度。

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

答案 1 :(得分:2)

是的,就像这样:

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

(最具体到最不具体)

答案 2 :(得分:2)

没有

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

catch (System.Exception ex)

捕获任何异常?当然,你应该只捕捉你将要处理的异常。

答案 3 :(得分:1)

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

请改用此语法:

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

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

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

Microsoft在此处提供了有关最佳做法的有用文章:Best Practices for Handling Exceptions