Почему я могу написать общий оператор catch в С#, который ничего не делает?

Возможный дубликат:
Почему я могу уловить общее исключение в С#?

Недавно я просматривал и писал Автоматический выключатель. Следующий метод компилируется, но блок catch никогда не вводится. У меня много рабочих обходов, и это не единственный способ получить правильное поведение (фильтрация исключений), но мне любопытно почему это компилируется и не работает!

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

Вот тест, который должен ввести блок catch предыдущего метода.

[TestMethod]
public void Throw_an_exception()
{
    circuitBreaker.AttemptCall<Exception>(() => throw new Exception());
    // test the circuit breaker state
}