1

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

   try
   {
      //Some code
   }
   catch
   {

   }

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

   }

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

   }

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

4

9 回答 9

2

到目前为止,您使用catch (Exception),第一个和第二个是相同的。在这种情况下,你会抓住一切。当您想捕获特定异常UnauthorizedAccessException时,您必须像这样使用第二个异常:

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

在第三种情况下,您可以通过变量使用异常oops

例如:

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

或者有一个特定的例外:

try
{
    //Some code
}
catch (UnauthorizedAccessException oops)
{
    MessageBox.Show(oops.Message);
}
于 2013-04-08T08:29:29.580 回答
2

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

如果您不想使用其中的任何信息,则可以只指定异常的类型,但通常您需要为其命名以便获取信息:

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
}
于 2013-04-08T08:32:59.190 回答
1

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

try
{
   //Some code
}
catch
{

}

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

try
{

}
catch (UnauthorizedAccessException)
{

}

这将与上述相同,但为您提供一个可以访问异常属性的变量。

try
{

}
catch (UnauthorizedAccessException ex)
{

}
于 2013-04-08T08:30:44.237 回答
0

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

第一种方式也一样,但都是“吃例外”,女巫是最糟糕的事情。

至少记录你的异常!

于 2013-04-08T08:29:39.423 回答
0

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

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

经验法则 - 尽你所能,让其他一切浮出水面。

于 2013-04-08T08:29:40.010 回答
0

你的第一个和第二个例子是一样的。它们都将捕获任何异常,而无需任何有关异常的信息。第三个异常将异常存储在 中oops,然后您可以使用它来获取有关异常的更多信息。

于 2013-04-08T08:29:52.730 回答
0

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

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

于 2013-04-08T08:31:11.113 回答
0

第三个是最好的...

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

例如:可以捕获 DivisionByZeroException、TargetInvocationException、ArrayOutOfBoundException 等...

于 2013-04-08T08:34:46.820 回答
0

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

以这种方式使用 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

于 2013-04-08T08:46:10.117 回答