方法 : finally ブロックを使用する

例外が発生すると、処理が中止され、最も近い例外ハンドラーへ制御が渡されます。 このため、常に呼び出されるはずのコード行が実行されないことがよくあります。 例外がスローされても、ファイルのクローズなどの一部のリソース クリーンアップ処理は常に実行されます。 クリーンアップ処理を常に実行するには、finally ブロックを使用します。 例外がスローされたかどうかに関係なく、finally ブロックは常に実行されます。

try ブロックと catch ブロックを使用して ArgumentOutOfRangeException をキャッチするコード例を次に示します。 Main メソッドは 2 つの配列を作成し、1 つの配列をもう 1 つの配列へコピーしようとします。 このコピー操作により ArgumentOutOfRangeException が生成されるため、コンソールへエラーが出力されます。 finally ブロックは、コピー操作の結果に関係なく実行されます。

使用例

Imports System

Class ArgumentOutOfRangeExample
    Public Shared Sub Main()
        Dim array1() As Integer = {0, 0}
        Dim array2() As Integer = {0, 0}

        Try
            Array.Copy(array1, array2 , -1)
        Catch e As ArgumentOutOfRangeException
            Console.WriteLine("Error: {0}", e)
        Finally
            Console.WriteLine("This statement is always executed.")
        End Try
    End Sub
End Class
using System;

class ArgumentOutOfRangeExample
{
    public static void Main()
    {
        int[] array1 = {0, 0};
        int[] array2 = {0, 0};

        try
        {
            Array.Copy(array1, array2, -1);
        }
        catch (ArgumentOutOfRangeException e)
        {
            Console.WriteLine("Error: {0}", e);
        }
        finally
        {
            Console.WriteLine("This statement is always executed.");
        }
    }
}
using namespace System;

ref class ArgumentOutOfRangeExample
{
public:
    static void Main()
    {
        array<int>^ array1 = {0, 0};
        array<int>^ array2 = {0, 0};

        try
        {
            Array::Copy(array1, array2, -1);
        }
        catch (ArgumentOutOfRangeException^ e)
        {
            Console::WriteLine("Error: {0}", e);
        }
        finally
        {
            Console::WriteLine("This statement is always executed.");
        }
    }
};

int main()
{
    ArgumentOutOfRangeExample::Main();
}

参照

処理手順

方法 : Try ブロックと Catch ブロックを使用して例外をキャッチする

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

方法 : ユーザー定義の例外を作成する

その他の技術情報

例外処理の基本事項