我知道,我们可以使用try-catch块来处理异常。但我对Try-Catch的用法有一些疑问。有什么区别
try
{
//Some code
}
catch
{
}
和
try
{
//Some code
}
catch(Exception)
{
}
和
try
{
//Some code
}
catch(Exception oops)
{
}
在我的程序中,我需要捕获所有异常,我不想记录它们。从上面提到的Try-Catch块中,应该使用哪一个?
使用不带参数的catch
在框架2.0中不再有用,因为所有非托管异常都封装在托管异常中。在此之前,您可以使用它来捕获非托管代码引发的异常。
如果你不想使用异常的任何信息,你可以只指定异常的类型,但通常你想要一个名称,这样你就可以获得信息:
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
}
到目前为止,您使用的是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);
}
通用try-catch,这将捕获任何类型的异常
try
{
//Some code
}
catch
{
}
这将捕获您指定的特定类型的异常,您可以指定多个。
try
{
}
catch (UnauthorizedAccessException)
{
}
这将执行与上面相同的操作,但为您提供一个可以访问异常属性的变量。
try
{
}
catch (UnauthorizedAccessException ex)
{
}
您应该使用最后一个,并以干净的方式处理您的异常。
第一种方式也是一样的,但都是"吃例外",女巫是最糟糕的事情。
至少记录您的异常!
您的第一个和第二个示例是相同的。它们都将捕获任何异常,而不包含任何有关异常的信息。第三个异常将异常存储在oops
中,然后您可以使用它来获取有关该异常的更多信息。
查看msdn文档:http://msdn.microsoft.com/en-us/library/vstudio/0yd65esw.aspx
最好的方法是指定要捕获的错误类型。
第三个是最好的。。。
你可以捕捉到任何类型的特定异常,它将是精确的。。。这有助于识别确切的异常,并且我们也很容易纠正
例如:可以捕获DivisionByZeroException、TargetInvocationException、ArrayOutOfBoundException等。
它们几乎都是一样的(我假设第一个是写第二个的简写(,与最后一个的区别在于你将异常对象放入一个变量中,这样你就可以在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