异常处理Try-Catch块差异

时间:2013-04-08 08:26:20

标签: c# exception

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

   try
   {
      //Some code
   }
   catch
   {

   }

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

   }

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

   }

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

9 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:2)

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

如果你不想使用它的任何信息,你可以只指定例外的类型,但通常你需要一个名字,以便你可以获得信息:

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

VS

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
}

答案 2 :(得分:1)

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

try
{
   //Some code
}
catch
{

}

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

try
{

}
catch (UnauthorizedAccessException)
{

}

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

try
{

}
catch (UnauthorizedAccessException ex)
{

}

答案 3 :(得分:0)

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

第一种方式是相同但是“吃异常”,女巫是最糟糕的事情。

至少记录你的异常!

答案 4 :(得分:0)

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

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

经验法则 - 处理你能做的事,让其他一切都冒出来。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

最好的是指出你想要捕获哪种错误。

答案 7 :(得分:0)

第三个是最好的......

你可以捕获任何类型的特定异常并且它将是精确的......这有助于识别确切的异常,并且我们也可以轻松纠正它们

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

答案 8 :(得分: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