2010-01-08 13 views
10

Duplicar posible:
Why can’t I catch a generic exception in C#?¿Por qué puedo escribir una declaración catch genérica en C# que no hace nada?

He estado revisando y escribiendo Circuit Breaker código recientemente. El siguiente método se compila, pero el bloque catch nunca se ingresa. Tengo muchas soluciones alternativas, y esta no es la única forma de obtener el comportamiento correcto (excepciones de filtrado), pero tengo curiosidad por saber por qué esto compila y no funciona!

public void AttemptCall<TException>(Action action) 
    where TException : Exception 
{ 
    try 
    { 
     action(); 
    } 
    catch(TException e) // This block is never entered! 
    { 
     state.ActUponException(e); 
     throw; 
    } 
} 

Aquí es una prueba que debe entrar en el bloque catch del método anterior.

[TestMethod] 
public void Throw_an_exception() 
{ 
    circuitBreaker.AttemptCall<Exception>(() => throw new Exception()); 
    // test the circuit breaker's state 
} 
+0

No veo nada malo con el código que envió. tal vez algo extraño está pasando dentro del estado. ActUponException (e). – Jimmy

+0

+ 1..buena pregunta. –

+0

No debe compilar y no permitir el uso de un tipo genérico como el filtro de captura O compilar y tener la excepción de tiempo de ejecución capturada y manejada correctamente. El hecho de que compila pero no capta la excepción es extraño. –

Respuesta

Cuestiones relacionadas