0

这是 Visual Studio 生成 try catch 语法时的标准文本。我发现我总是必须通过并将“ex”变量添加到“catch (Exception ex)”。

为什么微软不包含“e”或“ex”,为什么有人想要捕获异常而不想要它的细节?

try
{

}
catch (Exception)
{

throw;
}
4

4 回答 4

2

此外,如果您只想重新抛出要在程序中的另一点处理的异常,通过在 throw 中按名称指定异常变量,您将丢失堆栈跟踪和其中包含的有用信息。阅读内容以获取更多信息。

于 2013-08-09T05:35:18.743 回答
1

许多开发人员理所当然地在他们的项目中打开“将警告视为错误”。这段代码

try
{

}
catch (Exception ex)
{
    throw;
}

将至少产生一个警告(或错误,如果如上所述,开发人员已打开 TWAE)。自动添加引发新警告或将导致代码编译失败的代码通常是一个坏主意。所以这就是为什么它不添加ex.

在某些情况下,特定代码块的异常可能只有一个原因。在这种情况下,您不需要以任何方式检查异常对象——您已经知道将如何从这种情况中恢复。Exception在这种情况下,您可能会合法地不检查异常对象 - 如果为其命名,则会再次收到警告或错误。

于 2013-08-09T10:27:36.810 回答
0

我很少需要异常的实例。这就是为什么他们称它们为“例外”;如果一切都是例外,我们还不如抛弃“错误”一词。通过指定您希望捕获的子类异常,您可以处理特定情况并在实际有错误时重新抛出。

前任。如果你试图解析一个 int,你会期望捕获一个 FormatException。您不需要了解有关异常类型的任何其他信息,只需了解参数可能无效的可能性。

在这种情况下,这是没有用的:

try{
    int a = int.parse(someString);
} catch(FormatException ex)
{
    Console.WriteLine("someString cannot be parsed to an int!");
    //Do we really need the exception instance e?
}
于 2013-08-09T05:21:06.410 回答
0

因为,

有许多类型的异常可能发生。而且,您可能希望自己处理这些异常。这就是为什么我们在 Catch 语句中有一个 Execption。

不要忘记:您可以像这样尝试 Catch 语句:

Try{

}
Catch(ExceptionType1 ex)
{
   --Handle that Type of Exception accordingly
}
Catch(ExceptionTypeAnother ex)
{
    -- Handle that Type of Exception Accordingly
}
Catch(Exception ex)    --If another problems happens but not above then
{
     -- Error that might happen if the above fails 
 }

希望你明白我想让你明白什么。

我认为您要指出的是微软提供的一项出色功能。

于 2013-08-09T05:21:44.883 回答