方法 : catch ブロックで特定の例外を使用する

発生した例外はスタックに渡され、いずれかの catch ブロックで処理されます。 catch ステートメントの順序は重要です。 一般例外の catch ブロックの前に、特定の例外を対象とした catch ブロックを配置します。このように配置しないと、コンパイラからエラーが発行される可能性があります。 適切な catch ブロックを判別するために、例外の種類と、catch ブロックに指定されている例外の名前が一致するかどうかが調べられます。 特定の catch ブロックが存在しないが、一般の catch ブロックが存在する場合には、一般の catch ブロックによって例外がキャッチされます。

try ブロックと catch ブロックを使用して InvalidCastException をキャッチするコード例を次に示します。 このコード例では、従業員レベル (Emlevel) のプロパティだけを持つ Employee クラスが作成されます。 PromoteEmployee メソッドは、オブジェクトを受け取り、従業員レベルをインクリメントするメソッドです。 DateTime インスタンスが PromoteEmployee メソッドに渡されると、InvalidCastException が発生します。

使用例

Imports System

Public Class Employee
    'Create employee level property.
    Public Property Emlevel As Integer
        Get
            Return emlevelValue
        End Get
        Set
            emlevelValue = Value
        End Set
    End Property

    Private emlevelValue As Integer = 0
End Class

Public Class Ex13
    Public Shared Sub PromoteEmployee(emp As Object)
        'Cast object to Employee.
        Dim e As Employee = CType(emp, Employee)
        ' Increment employee level.
        e.Emlevel = e.Emlevel + 1
    End Sub

    Public Shared Sub Main()
        Try
            Dim o As Object = New Employee()
            Dim newyears As New DateTime(2001, 1, 1)
            'Promote the new employee.
            PromoteEmployee(o)
            'Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
            PromoteEmployee(newyears)
        Catch e As InvalidCastException
            Console.WriteLine("Error passing data to PromoteEmployee method. " + e.Message)
        End Try
    End Sub
End Class
using System;

public class Employee
{
    //Create employee level property.
    public int Emlevel
    {
        get
        {
            return(emlevel);
        }
        set
        {
            emlevel = value;
        }
    }

    private int emlevel = 0;
}

public class Ex13
{
    public static void PromoteEmployee(Object emp)
    {
        //Cast object to Employee.
        Employee e = (Employee) emp;
        // Increment employee level.
        e.Emlevel = e.Emlevel + 1;
    }

    public static void Main()
    {
        try
        {
            Object o = new Employee();
            DateTime newyears = new DateTime(2001, 1, 1);
            //Promote the new employee.
            PromoteEmployee(o);
            //Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
            PromoteEmployee(newyears);
        }
        catch (InvalidCastException e)
        {
            Console.WriteLine("Error passing data to PromoteEmployee method. " + e.Message);
        }
    }
}
using namespace System;

public ref class Employee
{
public:
    Employee()
    {
        emlevel = 0;
    }

    //Create employee level property.
    property int Emlevel
    {
        int get()
        {
            return emlevel;
        }
        void set(int value)
        {
            emlevel = value;
        }
    }

private:
    int emlevel;
};

public ref class Ex13
{
public:
    static void PromoteEmployee(Object^ emp)
    {
        //Cast object to Employee.
        Employee^ e = (Employee^) emp;
        // Increment employee level.
        e->Emlevel++;
    }

    static void Main()
    {
        try
        {
            Object^ o = gcnew Employee();
            DateTime^ newyears = gcnew DateTime(2001, 1, 1);
            //Promote the new employee.
            PromoteEmployee(o);
            //Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
            PromoteEmployee(newyears);
        }
        catch (InvalidCastException^ e)
        {
            Console::WriteLine("Error passing data to PromoteEmployee method. " + e->Message);
        }
    }
};

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

catch ブロックによってキャッチされなかった例外は、共通言語ランタイムによってキャッチされます。 ランタイムの構成に応じて、デバッグ ダイアログ ボックスが表示されるか、またはプログラムにより処理が停止されて例外情報のダイアログ ボックスが表示されます。 デバッグの詳細については、「アプリケーションのデバッグとプロファイリング」を参照してください。

参照

処理手順

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

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

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

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

概念

Exception クラスとプロパティ

その他の技術情報

例外処理の基本事項