Perché è possibile scrivere una dichiarazione di cattura generica in C # che non fa niente? [duplicare]

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

Domanda

  

Eventuali duplicati:
   Perché non posso prendere un'eccezione generica in C #?

Sono stato rivedendo e la scrittura di Circuit Breaker il codice di recente. Il seguente metodo compila, ma il blocco catch non è mai entrato. Ho un sacco di work-around, e questo non è l'unico modo per ottenere il giusto comportamento (eccezioni di filtraggio), ma sono curioso perché questo compila e non funziona

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

Ecco un test che dovrebbe entrare nel blocco catch del metodo precedente.

[TestMethod]
public void Throw_an_exception()
{
    circuitBreaker.AttemptCall<Exception>(() => throw new Exception());
    // test the circuit breaker's state
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top