繁体   English   中英

这个try-catch块是否有效?

[英]Is this try-catch block valid?

新问题......

是否有效:

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

或者我总是必须使用:

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

两个块都有效。

第一个不会有异常变量。

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

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

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

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

既未指定异常类型也未指定异常变量名称的catch子句称为常规catch子句。 try语句只能有一个常规catch子句,如果有一个,它必须是最后一个catch子句

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

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

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

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

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

正如@David所说,这是有效的。
如果要获取更多信息或捕获特定异常,可以使用第二种语法。 例如

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

是的,它是有效的。

你可以随时参考这篇文章:

在MSDN上处理异常的最佳实践

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

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

在这个块中你可以使用SqlException等。

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

为此使用“(SqlException e)”

如果您将使用通用的menssage,请使用:

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

or

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

不要忘记你可以链接捕获你的异常。 这将允许您根据代码可能抛出的异常处理不同的方案。

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

暂无
暂无

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

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