如何在捕获块中使用特定异常

通常,捕获特定类型的异常而不是使用基本 catch 语句是很好的编程做法。

发生异常时,它会沿着堆栈向上传递,并且每个 catch 块都有机会处理它。 catch 语句的顺序很重要。 将面向特定异常的 catch 块置于通用异常捕获块之前,否则编译器可能会产生错误。 正确的 catch 块通过匹配异常的类型与 catch 块中指定的异常的名称来确定。 如果没有特定的 catch 块,则常规 catch 块会捕获异常(如果存在)。

下面的代码示例使用一个try/catch块来捕获InvalidCastException。 该示例创建一个名为Employee的类,该类包含一个属性:员工级别Emlevel。 一个方法PromoteEmployee接收一个对象并提高其员工级别。 DateTimeInvalidCastException实例传递给PromoteEmployee方法时发生。

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.
        var e = (Employee) emp;
        // Increment employee level.
        e.Emlevel = e.Emlevel + 1;
    }

    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);
        }
    }
}
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

另请参阅