繁体   English   中英

异常处理Try-Catch块差异

[英]Exception handling Try-Catch block difference

我知道,我们可以使用try-catch块来处理异常。 但是我对Try-Catch的用法有些怀疑。 之间有什么区别

   try
   {
      //Some code
   }
   catch
   {

   }

   try
   {
    //Some code
   }
   catch(Exception)
   {

   }

   try
   {
    //Some code
   }
   catch(Exception oops)
   {

   }

在我的程序中,我需要捕获所有异常,并且我不想记录它们。 从上面提到的Try-Catch块中,应该使用哪个?

到目前为止,您使用catch (Exception) ,第一个和第二个相同。 在这种情况下,您可以抓住一切。 当您想要捕获特定的异常(例如UnauthorizedAccessException ,必须使用第二个异常,如下所示:

try
{
    //Some code
}
catch (UnauthorizedAccessException)
{
    MessageBox.Show(oops.Message);
}

在第三种情况下,可以通过变量oops使用Exception。

例如:

try
{
    //Some code
}
catch (Exception oops)
{
    MessageBox.Show(oops.Message);
}

或有特定例外:

try
{
    //Some code
}
catch (UnauthorizedAccessException oops)
{
    MessageBox.Show(oops.Message);
}

从框架2.0开始,使用不带参数的catch不再有用,因为所有非托管异常都包装在托管异常中。 在此之前,您可以使用它来捕获非托管代码引发的异常。

如果您不想使用异常的任何信息,则可以只指定异常的类型,但是通常您希望为其指定名称,以便可以获取该信息:

try {
  // some code
} catch(Exception) {
  // i don't care about any information in the Exception object, just the type
}

try {
  // some code
} catch(Exception ex) {
  // use some information from the exception:
  MessageBox.Show("Internal error", ex.Message);
}

您应始终尝试使异常类型尽可能具体,因为这样可以更轻松地处理异常。 然后,您可以添加不太具体的类型来处理其他异常。 例:

try {
  // some database code
} catch(SqlException ex) {
  // something in the database call went wrong
} catch(Exception ex) {
  // something else went wrong
}

通用try catch,它将捕获任何类型的异常

try
{
   //Some code
}
catch
{

}

这将捕获您指定的特定类型的异常,您可以指定多个。

try
{

}
catch (UnauthorizedAccessException)
{

}

这样做与上面相同,但是为您提供了一个可以访问异常属性的变量。

try
{

}
catch (UnauthorizedAccessException ex)
{

}

您应该使用最后一个,并以干净的方式处理您的异常。

第一种也是相同的,但都是“饮食异常”,女巫是最糟糕的事情。

至少记录您的异常!

它们几乎都是相同的(我假设第一个是编写第二个的简写),与最后一个的不同是,您将异常对象放入变量中,以便可以在捕获中使用它。

通常,当我看到这样的代码时,我会担心,因为通常这不是一个好主意,因为您可能掩盖了应用程序的更大问题。

经验法则-尽力而为,让其他一切都腾腾起来。

您的第一个和第二个示例是相同的。 它们都将捕获任何异常,而没有有关该异常的任何信息。 第三个异常将异常存储在oops ,然后可以使用它们来获取有关该异常的更多信息。

查看msdn文档: http : //msdn.microsoft.com/zh-cn/library/vstudio/0yd65esw.aspx

最好的方法是指定您要捕获的错误类型。

第三个是最好的...

您可以捕获任何类型的特定异常,而且会很精确...这有助于识别确切的异常,并且便于我们更正它们

例如:可以捕获DivisionByZeroException,TargetInvocationException,ArrayOutOfBoundException等。

我认为它具有相同的功能-跟踪错误的设置位置/或哪里出错了,

以这种方式使用try-catch

> try {

//some codes 
 }

catch
{
//anything
//e.g.:
MessageBox.Show("Something is wrong!");
}

这表明存在问题,但未显示详细报告。 (隐藏某些错误的聪明方法是不要在catch {} xD中放任何东西,但是不建议这样做)

接下来是显示错误的详细报告

try
{
//some codes
}

catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

希望这可以帮助! :D

暂无
暂无

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

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