2010-01-08 4 views
10

가능한 중복 :
Why can’t I catch a generic exception in C#?C#에서 일반 catch 문을 작성할 수없는 이유는 무엇입니까?

내가 검토하고 최근 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; 
    } 
} 

이전 방법의 캐치 블록을 입력해야하는 시험이다.

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

난 당신이 게시 된 코드를 잘못 아무것도 표시되지 않습니다. 아마도 뭔가 이상한 일이 state.ActUponException (e) 내부에서 진행되고있을 것입니다. – Jimmy

+0

+ 1. 좋은 질문입니다. –

+0

제네릭 형식을 catch 필터로 사용하거나 컴파일 할 수 없도록 컴파일하거나 실행 예외를 캐치하고 적절히 처리해야합니다. 컴파일하지만 예외를 잡아 내지 못하는 것은 이상합니다. –

답변

관련 문제