C# 使用try finally只是为了确保在方法完成时执行某些操作,这样好吗?

C# 使用try finally只是为了确保在方法完成时执行某些操作,这样好吗?,c#,C#,我的方法返回多个点。我在执行期间也在许多点上构造新数据。无论返回到哪里,我都需要保存和存储构造的结果。为了不错过“return”,我用try finally块包围了代码,所以现在我确信新数据将被存储 List<X> newData = new List<X>(); try { .... update newData ..... return; ..... .... update newData ....

我的方法返回多个点。我在执行期间也在许多点上构造新数据。无论返回到哪里,我都需要保存和存储构造的结果。为了不错过“return”,我用try finally块包围了代码,所以现在我确信新数据将被存储

List<X> newData = new List<X>();
try
{
    ....
    update newData
    .....
    return;
    .....
    ....
    update newData
    ....
    update newData
    return;
    .....
    return;
} finally
{
    // copy newData to data    
}
List newData=newlist();
尝试
{
....
更新新数据
.....
返回;
.....
....
更新新数据
....
更新新数据
返回;
.....
返回;
}最后
{
//将新数据复制到新数据
}

但是我没有捕获任何异常,并且这段代码不打算处理异常。总体上可以接受还是您可以建议另一种更好的方法?

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

data = CreateList();

...

private List<X> CreateList()
{
    List<X> list = new List<X>();
    // It's fine to return list from any point here...
}
data=CreateList();
...
私有列表CreateList()
{
列表=新列表();
//可以从这里的任何一点返回列表。。。
}

finally的用法是在出现故障时用作备份(将其视为故障安全机制),包括原子性等


通常,方法的整个构造都是错误的,您可以对其进行重构,因为获得所有这些返回通常意味着您可以采用另一种方法(例如,在注释中建议使用开关)。

这看起来您可以使用。我不明白你为什么要马上回来。只有当它按预期工作时才可以接受。如果它不起作用,试着把它重构成更小的函数。如果有,有什么大不了的?在没有看到更详细的源代码之前,我无法给出任何具体的建议。除非有人拔掉插头,否则无论如何,
finally
块都会执行,您的代码将按预期工作;然而,正如其他人已经指出的,有更好的方法来构造代码。这几乎就是我要建议的:我要补充的是,在某些情况下,为了可读性,最好将
CreateList
主体放在另一个方法中,可以使用
操作
委托,其中
返回
仅退出该匿名方法。
开关
不是我需要的。里面的代码有很多分支,而且很难重构,因为逻辑不是琐碎的