这个try-catch块是否有效?

时间:2011-09-21 13:11:03

标签: c# try-catch

Newby问题......

是否有效:

try
{
    // code which may fail
}
catch
{
    Console.Writeline("Some message");
}

或者我总是必须使用:

try
{
    // code which may fail
}
catch (Exception e)
{
    Console.Writeline("Some message");
}

10 个答案:

答案 0 :(得分:5)

两个区块都有效。

第一个没有异常变量。

如果您不打算对异常变量执行任何操作但仍希望捕获特定异常,则还可以执行以下操作:

try 
{
   // your code here
}
catch(SpecificException)
{
   // do something - perhaps you know the exception is benign
}

但是,为了便于阅读,我将使用第二个选项并使用异常变量。与异常相关的最糟糕的事情之一是静默地吞下它们 - 至少记录异常。

答案 1 :(得分:3)

是的,绝对是这样一个名为general catch子句的catch块,在 C#语言规范4.0,8.10中看到更多有趣的细节try语句:

  

一个catch子句,既不指定异常类型也不指定   异常变量名称称为常规catch子句。一试   语句只能有一个通用的catch子句,如果有的话   目前它必须是最后一个捕获条款

答案 2 :(得分:2)

是的,您的第一个代码块有效。它将捕获所有异常。

答案 3 :(得分:1)

是的。它将捕获所有异常。所以这两个代码示例也是一样的。

答案 4 :(得分:1)

第一个是有效的,它就像第二个一样。

http://msdn.microsoft.com/en-us/library/0yd65esw%28v=vs.80%29.aspx

  

catch子句可以不带参数使用,在这种情况下可以使用它   捕获任何类型的异常,并称为一般捕获   条款。它还可以采用派生自的对象参数   System.Exception,在这种情况下它处理特定的异常。

答案 5 :(得分:1)

@David回答这是有效的。
如果要获取更多信息或捕获特定异常,可以使用第二种语法。 E.g。

catch (Exception e) 
{
  Debug.Print(e.Message);
}

答案 6 :(得分:1)

是的,它是有效的。

你总是可以参考这篇文章:

MSDN上的

Best Practices for Handling Exceptions

答案 7 :(得分:1)

当然它是有效的,当您想要输出错误消息ex.Message时,指定catch(Exception e),或者捕获自定义或具体的异常。在您的情况下使用catch

答案 8 :(得分:1)

catch (Exception e)
{
    Console.Writeline("Some message");
}

在此块中,您可以使用SqlException等。

catch (SqlException e)
{
    Console.Writeline("Some message");
}

为此使用“(SqlException e)”

如果您使用通用文章,请使用:

catch
{
    Console.Writeline("Some message");
}

or

catch (Exception)
{
    Console.Writeline("Some message");
}

答案 9 :(得分:1)

不要忘记你可以锁定你的例外情况。这将允许您根据代码可能抛出的异常处理不同的场景。

try
{
    //Your code.
}
catch(SpecificException specificException)
{
    //Handle the SpecificException
}
catch(AnotherSpecificException anotherSpecificException)
{
    //Handle AnotherSpecificException
}
catch(Exception exception)
{
    //Handle any Exception
}