为什么我可以在C#中编写一个通用的catch语句,什么都不做?

时间:2010-01-08 18:10:01

标签: c# generics try-catch circuit-breaker

  

可能重复:
  Why can’t I catch a generic exception in C#?

我最近一直在审核并编写 Circuit Breaker 代码。编译以下方法,但永远不会输入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
}