C#中的Catch and Catch(例外e)

时间:2012-09-09 06:13:17

标签: c# .net

我猜这三部分代码没有区别,不是吗?

   try
    {
       // .............
    }
    catch
    {
        // ............. 
    }

   try
    {
       // .............
    }
    catch(Exception)
    {
       // .............  
    }

try
{
   // .............
}
catch(Exception e)
{
    // ............. 
}

然而,当我应该使用第一个和第二个时,我几乎是精明的。但我希望你能说出你的想法。

4 个答案:

答案 0 :(得分:14)

第一个也将捕获不是例外的抛出物体 (this can happen from non-CLS-compliant code

如果您实际上没有使用异常变量,则第二个不会给出编译器警告。

只有在您确实需要检查抛出的异常(例如,记录它)时才应使用第三个。

答案 1 :(得分:4)

那些代码相当有点不同。

第一个不允许您从发生的异常中获取任何信息。它会抓住任何东西,但你不会有任何线索被捕获的

第二个不允许你做任何事情,但至少让你指定什么样的例外。在您的示例中,由于您已指出Exception,因此它将捕获从Exception派生的所有内容。但它可能会被改变以微调被捕获的东西 - 但仍然允许你不做任何事情。

第三个允许您实际访问异常并从中获取信息。

答案 2 :(得分:1)

第三种情况实际上就是这样:

当try块中的一行发生异常时,会创建一个对应异常的对象。包含(Exception e)的catch块实际上具有Exception类变量e作为其参数。然后将异常对象的引用复制到此引用变量。您现在可以根据需要使用此e变量来识别引发的异常类型,例如e.message()给出与异常相关的描述。

Slaks

很好地解释了第一个和第二个案例

答案 3 :(得分:-1)

这取决于。我不知道前两者之间的区别。

如果要在catch块中使用异常,即获取堆栈跟踪或其他信息,则必须使用最后一个,以便有一个对象可供引用。

如果您只是为其他人处理异常,则不需要它。