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

本文关键字:执行 完成时 操作 是否 方法 try-finally 确保 使用 | 更新日期: 2023-09-27 18:34:01

我的方法返回很多点。我在执行过程中也在许多点上构造了 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    
}

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

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

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

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

finally 的使用旨在作为失败时的备份(将其视为故障安全机制(,包括原子性等。

通常,

您的方法的整个构造是错误的,您可以重构它,因为获得所有这些回报通常意味着您可以采用另一种方法来处理事情(例如,使用注释中建议的某人的开关(。