2009-03-19 5 views
2

는 "SomeException는"예외 스택에 예외를 찾는 방법을

인가 유형 인 우리가 ex.InnerException.InnerException.InnerException을 가정 해 봅시다, 우리가 특정 예외는 "SomeException"예외 스택의 일부임을 가정 그래서

하자 예외 스택에서 주어진 예외 유형을 찾으려는 C#의 내장 API가 있습니까?

예 :

SomeException someExp = exp.LocateExceptionInStack(typeof(SomeException)); 
+0

나는 거기 있다고 생각하지 않는다. 왜냐하면 아마 너는 그렇게하고 싶지 않기 때문이다. 왜 그런 복잡한 방식으로 예외를 처리하고 싶습니까? – Grzenio

+0

나는 원인에 따라 깊이가 다른 스택 어딘가에 특정 종류의 Oracle 예외를 찾으려고하기 전에이 작업을해야했습니다. –

+0

아, 오라클, 충분히 공정하게 :) – Grzenio

답변

6

아니, 내가 어떤 그 일의 방식으로 내장 거기에 생각하지 않습니다. 당신은 C# 3를 사용하는 경우

public static T LocateException<T>(Exception outer) where T : Exception 
{ 
    while (outer != null) 
    { 
     T candidate = outer as T; 
     if (candidate != null) 
     { 
      return candidate; 
     } 
     outer = outer.InnerException; 
    } 
    return null; 
} 

당신이 (그냥 "이 예외 외부"매개 변수를 만드는) 그것을 확장 메서드를 만들 수 있으며 사용하기에도 좋을 것 : 그래도 쓰기 어렵지 않다

SomeException nested = originalException.Locate<SomeException>(); 

(물론 이름의 단축을 주 - 자신의 취향 :

1

에 적응 그것은 코드의 단지 4 개 라인이다 :

public static bool Contains<T>(Exception exception) 
     where T : Exception 
    { 
     if(exception is T) 
      return true; 

     return 
      exception.InnerException != null && 
      LocateExceptionInStack<T>(exception.InnerException); 
    } 
+0

재귀를 수행해야하는 경우 Contains 또는 LocateExceptionInStack을 호출할지 여부를 결정할 수 있습니다. –

관련 문제