使用try-finally只是为了确保在方法完成时执行某些操作?

时间:2012-05-14 12:31:58

标签: c#

我的方法在许多方面都有所回报。我在执行期间也在很多方面构造newData。无论我返回哪里,我都需要保存并存储构造结果。不要错过“返回”我只是用try-finally块包围代码,所以现在我确定将存储newData。

List<X> newData = new List<X>();
try
{
    ....
    update newData
    .....
    return;
    .....
    ....
    update newData
    ....
    update newData
    return;
    .....
    return;
} finally
{
    // copy newData to data    
}

但我没有发现任何异常,并且此代码不适用于异常。一般来说是否可以接受,或者你可以建议另一种更好的方法?

2 个答案:

答案 0 :(得分:6)

我建议将try块中的代码重构为新方法:

data = CreateList();

...

private List<X> CreateList()
{
    List<X> list = new List<X>();
    // It's fine to return list from any point here...
}

答案 1 :(得分:2)

如果某些内容失败(将其视为故障安全机制),包括原子性等,则finally的用法是作为备份。

一般来说,你的方法的整个结构是错误的,你可以重构它,因为获得所有这些返回通常意味着你可以采取另一种方法(例如在建议的评论中使用开关)。