Share via


Uso de controladores de excepciones filtradas por el usuario

Los controladores de excepciones filtradas por usuario detectan y controlan las excepciones en función de los requisitos que se definen para la excepción. Estos controladores usan la instrucción catch con la palabra clave when (Catch y When en Visual Basic).

Esta técnica es útil cuando un objeto de excepción concreto corresponde a varios errores. En este caso, el objeto normalmente tiene una propiedad que contiene el código de error específico asociado con el error. Puede utilizar la propiedad de código de error en la expresión para seleccionar solo el error concreto que desea administrar en esa cláusula catch.

El siguiente ejemplo ilustra la instrucción catch/when.

try
{
    //Try statements.  
}
catch (Exception ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.  
    Catch When Err = VBErr_ClassLoadException
    'Catch statements.
End Try  

La expresión de la cláusula filtrada por el usuario no está restringida en modo alguno. Si se produce una excepción durante la ejecución de la expresión filtrada por el usuario, esa excepción se descarta y la expresión de filtro se considera evaluada como false. En este caso, Common Language Runtime continúa la búsqueda de un controlador para la excepción actual.

Combinar la excepción específica y las cláusulas filtradas por el usuario

Una instrucción catch puede contener tanto la excepción específica como las cláusulas filtradas por el usuario. El motor de tiempo de ejecución comprueba primero la excepción específica. Si la comprobación de la excepción específica es correcta, el motor de tiempo de ejecución ejecuta el filtro de usuario. El filtro genérico puede contener una referencia a la variable declarada en el filtro de clase. Tenga en cuenta que no se puede revertir el orden de las dos cláusulas de filtro.

El siguiente ejemplo muestra la excepción específica en la instrucción Catch, así como la cláusula filtrada por el usuario mediante la palabra clave when.

try
{
    //Try statements.  
}
catch (System.Net.Http.HttpRequestException ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.
    Catch cle As ClassLoadException When cle.IsRecoverable()  
    'Catch statements.
End Try  

Vea también