5

私の方法は多くの点で返されます。実行中にも多くの点で newData を構築します。どこに戻っても、構築された結果を保存して保存する必要があります。「return」を見逃さないように、コードを try-finally ブロックで囲んだだけなので、newData が確実に格納されるようになりました。

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

しかし、私は例外をキャッチしません。また、このコードは例外を処理することを意図していません。それは一般的に受け入れられますか、それとも別のより良いアプローチを提案できますか?

4

2 に答える 2

6

tryブロック内のコードを新しいメソッドにリファクタリングすることをお勧めします。

data = CreateList();

...

private List<X> CreateList()
{
    List<X> list = new List<X>();
    // It's fine to return list from any point here...
}
于 2012-05-14T12:33:47.873 に答える
2

finally の使用は、原子性などを含め、何かが失敗した場合のバックアップとして意図されています (フェイルセーフ メカニズムと考えてください)。

一般に、メソッドの構造全体が間違っており、リファクタリングできます。通常、これらすべての戻り値を取得すると、別のアプローチを取ることができるためです(コメントの誰かが提案したようにスイッチを使用する例)。

于 2012-05-14T12:36:21.357 に答える