Pourquoi puis-je écrire une déclaration de capture générique en C # qui ne fait rien? [dupliquer]

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

Question

  

Possible en double:    Pourquoi ne puis-je attraper une exception générique en C #?

Je l'ai passé en revue et de l'écriture disjoncteur Code récemment. La méthode suivante compile, mais le bloc catch n'est jamais entré. J'ai beaucoup de contournements, et ce n'est pas la seule façon d'obtenir le bon comportement (des exceptions de filtrage), mais je suis curieux de pourquoi cette compile et ne fonctionne pas

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

Voici un test qui devrait entrer dans le bloc catch de la méthode précédente.

[TestMethod]
public void Throw_an_exception()
{
    circuitBreaker.AttemptCall<Exception>(() => throw new Exception());
    // test the circuit breaker's state
}
Était-ce utile?

La solution

Son href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=362422&wa=wsignin1.0" rel="nofollow noreferrer"> un bug

scroll top