Try / Catch - “代码风格”问题

时间:2011-09-21 07:29:07

标签: c# coding-style try-catch

一般情况下,我想创建一个代码,使调用成为可能引发异常的类的Execute函数。我的问题是我应该设置类,我应该在try / catch或out方面从中提取值吗?

选项A:

neededValue V;

try
{
    MyClass C = new MyClass();
    C.SomeParam = XXX;
    C.Execute();
    V = C.SomeParam2;
}
catch
{
    //Clean up...
    //Log...
    //Throw new exception
}

选项B:

neededValue V;
MyClass C = new MyClass();
C.SomeParam = XXX;

try
{
    C.Execute();
}
catch
{
    //Clean up...
    //Log...
    //Throw new exception
}

V = C.SomeParam2;

我知道两者都有效,但哪个更好更容易阅读?

6 个答案:

答案 0 :(得分:11)

嘿那些不是一回事,在第一种情况下V = C.SomeParam2;永远不会在异常的情况下被执行,而在第二种情况下它将永远被执行。

更重要的是,你的catch块使用的例子是非常错误,总是将异常对象放在catch之后并使用日志记录框架记录某些已经发生的事情,然后如果发生异常则做出反应并处理异常你可以,并且只有在它有意义的情况下,或者扔它或者根本没有捕获它,你的调用代码才会捕获它。

答案 1 :(得分:4)

我会说选项B更容易阅读,更实用,因为稍后您会知道执行可以抛出和异常。

它们不同,在选项B中如果你处理异常,那么你的B变量也将被设置,而不仅仅是你的执行成功。

你应该总是用catch块指定你捕获的异常类型,这样你就可以处理它和/或正确记录它。

答案 2 :(得分:2)

我会说选项a更具可读性。而且我当然会如何做到这一点。

答案 3 :(得分:1)

两者都可以正常使用

但如果你想在try catch块之外使用MyClass对象,请使用第二个。

MyClass对象的第一个范围内,最多只能尝试阻止。

所以它取决于您的要求如何使用其中之一。

答案 4 :(得分:1)

我认为你应该在你的try块中包含所有与你想要完成的小任务有关的代码。但是,有时您需要在输入try块之前定义某些变量。例如,你总是想在try块之前定义InputStreams和OutputStreams,这样你就可以在finally块中关闭它们。

答案 5 :(得分:0)

这主要取决于一个问题。如果V方法失败,是否要为C.SomeParam2分配值Execute,并抛出异常?

如果您不希望在失败时分配,请转到A,如果您希望分配Execute,请转到B.

相关问题