Возможный дубликат:
Почему я могу уловить общее исключение в С#?
Недавно я просматривал и писал Автоматический выключатель. Следующий метод компилируется, но блок 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
}