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

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

Вопрос

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

Я просматривал и писал Автоматический выключатель код недавно.Следующий метод компилируется, но блок 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's state
}
Это было полезно?
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top