Compartir vía


Cómo usar excepciones específicas en un bloque catch

En general, es recomendable detectar un tipo específico de excepción en lugar de usar una instrucción básica catch .

Cuando se produce una excepción, se pasa por la pila y cada bloque catch tiene la oportunidad de manejarla. El orden de las instrucciones catch es importante. Coloque los bloques catch dirigidos a excepciones específicas antes que un bloque catch de excepción general, o el compilador podría emitir un error. El bloque catch adecuado se determina mediante la coincidencia del tipo de la excepción con el nombre de la excepción especificada en el bloque catch. Si no hay ningún bloque catch específico, la excepción se detecta mediante un bloque catch general, si existe uno.

En el ejemplo de código siguiente se usa un bloque try/catch para capturar un InvalidCastException. El ejemplo crea una clase denominada Employee con una sola propiedad, nivel de empleado (Emlevel). Un método, PromoteEmployee, toma un objeto e incrementa el nivel de empleado. Un InvalidCastException ocurre cuando se pasa una instancia de DateTime al método 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

Consulte también