Powiel możliwe:
Why can’t I catch a generic exception in C#?Dlaczego można napisać ogólne oświadczenie połowowe w języku C#, który nic nie robi?
I zostały przeglądanie i pisanie Circuit Breaker kod niedawno. Poniższa metoda kompiluje, ale blok catch nigdy nie jest wprowadzany. Mam wiele obejść i nie jest to jedyny sposób, aby uzyskać właściwe zachowanie (wyjątki filtrowania), ale jestem ciekawy, , dlaczego to kompiluje i nie działa!
public void AttemptCall<TException>(Action action)
where TException : Exception
{
try
{
action();
}
catch(TException e) // This block is never entered!
{
state.ActUponException(e);
throw;
}
}
Oto test, który powinien wejść do bloku catch poprzedniej metodzie.
[TestMethod]
public void Throw_an_exception()
{
circuitBreaker.AttemptCall<Exception>(() => throw new Exception());
// test the circuit breaker's state
}
nie widzę niczego złego w kodzie zaksięgowane. być może coś dziwnego dzieje się wewnątrz stanu.ActUponException (e). – Jimmy
+ 1. dobrze Pytanie. –
Nie należy kompilować ani nie zezwalać na używanie typowego typu jako filtru przechwytywania LUB kompilować i zapewnić, aby wyjątek środowiska wykonawczego był poprawnie przechwytywany i obsługiwany. Fakt, że kompiluje, ale nie przechwytuje wyjątku, jest dziwny. –