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
}
No veo nada malo con el código que envió. tal vez algo extraño está pasando dentro del estado. ActUponException (e). – Jimmy
+ 1..buena pregunta. –
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. –