try-finally (C# リファレンス)

更新 : 2010 年 5 月

finally ブロックは、try-catch (C# リファレンス) ブロックで割り当てられているリソースをクリーンアップする場合、および例外が発生しても実行する必要がるあるコードを実行する場合に便利です。 制御は、try ブロックがどのように終了したかに関係なく、常に finally ブロックに移動します。

catch がステートメント ブロックで発生した例外を処理するのに対して、finally はその前にある try ブロックがどのように終了したかに関係なくコードのステートメント ブロックを実行することを保証します。

使用例

例外を発生させる無効な変換ステートメントの例を次に示します。 プログラムを実行するとランタイム エラー メッセージが表示されますが、finally 句はそのまま実行を続け、出力を表示します。

    public class ThrowTest
    {
        static void Main()
        {
            int i = 123;
            string s = "Some string";
            object o = s;

            try
            {
                // Invalid conversion; o contains a string, not an int
                i = (int)o;

                Console.WriteLine("WriteLine at the end of the try block.");
            }
            finally
            {
                // To run the program in Visual Studio, type CTRL+F5. Then 
                // click Cancel in the error dialog.
                Console.WriteLine("\nThe finally block is executed, even though"
                    + " an error was caught in the try block.");
                Console.WriteLine("i = {0}", i);
            }
        }
        // Output:
        // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
        // at ValueEquality.ThrowTest.Main() in c:\users\sahnnyj\documents\visual studio
        // 2010\Projects\ConsoleApplication9\Program.cs:line 21
        //
        // The finally block is executed, even though an error was caught in the try block.
        // i = 123
    }

上の例では、System.InvalidCastException がスローされます。

例外はキャッチされますが、finally ブロックに含まれる出力ステートメントはそのまま実行され、次のようになります。

i = 123

finally の詳細については、「try-catch-finally」を参照してください。

C# には、便利な構文で try-finally ステートメントとまったく同じ機能を利用できる、using ステートメントが用意されています。

C# 言語仕様

詳細については、「C# 言語仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

参照

処理手順

方法 : 例外を明示的にスローする

参照

C# のキーワード

try, catch, and throw Statements (C++)

例外処理ステートメント (C# リファレンス)

throw (C# リファレンス)

try-catch (C# リファレンス)

概念

C# プログラミング ガイド

その他の技術情報

C# リファレンス

履歴の変更

日付

履歴

理由

2010 年 5 月

結果を明確にするため、例に書き込みステートメントと説明を追加。

カスタマー フィードバック