Por que eu posso escrever uma instrução catch genérico em C # que não faz nada? [duplicado]

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

Pergunta

Duplicate possíveis:
Por que não posso pegar uma exceção genérica em C #?

Eu tenho estado a rever e escrever Circuit Breaker código recentemente. O método a seguir compila, mas o bloco catch não é inserido. Tenho muitas soluções alternativas, e esta não é a única maneira de obter o comportamento correto (filtragem exceções), mas estou curioso Por que isso compila e não funciona !

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

Aqui é um teste que deve entrar no bloco catch do método anterior.

[TestMethod]
public void Throw_an_exception()
{
    circuitBreaker.AttemptCall<Exception>(() => throw new Exception());
    // test the circuit breaker's state
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top