Share via


HOW TO:使用 Catch 區塊中的特定例外狀況

當例外狀況發生時,它會在堆疊中向上傳遞,而讓各個 Catch 區塊都有機會來處理它。 Catch 陳述式的順序很重要。 請針對特定例外狀況將 Catch 區塊放在一般例外狀況 Catch 區塊之前,否則編譯器 (Compiler) 可能會發出錯誤。 適當的 Catch 區塊會藉著將 Catch 區塊中指定的例外狀況名稱與例外狀況類型作比對來決定。 如果沒有特定的 Catch 區塊,例外狀況由一般 Catch 區塊 (若有一個的話) 來攔截。

下列程式碼範例使用 Try/Catch 區塊來攔截 InvalidCastException。 範例建立稱為 Employee 的類別,它具有單一屬性「員工職等」(Emlevel)。 方法 , 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();
}

Common Language Runtime 會攔截未被 Catch 區塊攔截的例外狀況。 取決於執行階段如何被設定,不是偵錯對話方塊出現,就是程式停止執行而出現帶有例外狀況資訊的對話方塊。 如需偵錯的詳細資訊,請參閱偵錯和分析應用程式

請參閱

工作

HOW TO:使用 Try/Catch 區塊攔截例外狀況

HOW TO:明確擲回例外狀況

HOW TO:建立使用者定義的例外狀況

HOW TO:使用 Finally 區塊

概念

Exception 類別和屬性

其他資源

例外處理基礎觀念