¿Por qué puedo escribir una declaración de captura genérica en C # que no hace nada? [duplicar]

StackOverflow https://stackoverflow.com/questions/2029650

Pregunta

  

Duplicar posible:
   Por qué no puedo detectar una excepción genérica en C #?

He estado revisando y escribiendo Circuit Breaker código recientemente. El siguiente método compila, pero el bloque catch no se introduce. Tengo un montón de soluciones temporales, y esto no es la única manera de conseguir el comportamiento correcto (excepciones de filtrado), pero tengo curiosidad 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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top