12

これらのいずれかが危険ですか?1つが良いですか?それとも、印刷してダーツを投げて決定するものの1つですか?

最終的にどのように機能するかを理解したので、これを実行したいと思います。

try { 
    stuff that changes something... 
}
catch (System.Exception ex) { 
    something.worked = false; 
    something.err = ex.Message; 
}
finally { 
    stuff.close();
    return something; 
}

しかし、私は見ました:

try { 
    stuff that changes something...
    return something; 
}
catch (System.Exception ex) { 
    something.worked = false; 
    something.err = ex.Message; 
    return something; 
}
finally { 
    stuff.close(); 
}
4

3 に答える 3

18

returnからはできませんfinally。コンパイラ エラーが発生します。

コントロールは、finally 句の本体を離れることはできません


ターゲット クラスが実装されている場合IDisposableは、次のようにします。

using (stuff s = new stuff())
{
    return stuff;
}

また

using (stuff s = new stuff())
{
    try
    {
        // do stuff
        return stuff;
    }
    catch (Exception ex)
    {
        // do logging or another stuff
        return something;
    }
}

Dispose()それが必要/可能であるならば、あなたのために電話します。

于 2011-08-26T15:51:40.930 に答える
17

個人的にはどちらも使用せず、使用します


try { 
    stuff that changes something... 
}
catch (System.Exception ex) { 
    something.worked = false; 
    something.err = ex.Message; 
}
finally { 
    stuff.close();    
}
return something; 

また、finallyステートメントで、オブジェクトが失敗した場合に開いたり設定したりしていない可能性があるため、オブジェクトを閉じる/破棄する必要があることを確認してください。

こちらもご覧くださいIs it bad practice from within a try catch finally block?

于 2011-08-26T15:52:33.933 に答える
0

2 番目の方法にはリスクはありません。ただし、例外が発生した場合に異なる値を返すことができます。

于 2011-08-26T15:53:06.613 に答える