2014-03-25 3 views
0

따라서 객체 목록 (이 경우 ExceptionInfo)이 있습니다. 이러한 객체에는 Exception 객체에 넣을 정보가 들어 있습니다. 그러나 Exceptions는 중첩되어 있으며 Exception 객체의 InnerException 속성을 할당하는 유일한 방법은 구성시이를 지정하는 것입니다.반복 목록을 사용하여 객체 목록을 중첩 된 객체 집합으로 바꿈

그래서, 정말 같은 것을 hvae :

static Exception ListToNestedExceptions(List<ExceptionInfo> l, int index=0) 
    { 
     if (index > l.Count) 
     { 
      return null; 
     } 
     var e = new Exception("", ListToNestedExceptions(l, ++index)); 
     e.Data[ExceptionDataKeys.StackTrace] = l[index].Stacktrace; 
     return e; 
    } 

나는 이론은 그러나, 재귀 수 반복으로 모든 것을 할 수 있다는 것을 알고, 내가 그 여기에 적용됩니다 볼 수 없습니다 . 나는이 버전을 사용해도 괜찮 았지만 호기심에서 벗어나이를 임시 버전으로 전환 할 수 있습니까? 또한 꼬리 호출 최적화를 적용 할 수 있습니까?

답변

1

재귀없이 다음 샘플을 시도하십시오. 주요 아이디어는 목록에서 마지막으로 ExceptionInfo부터 첫 번째까지 반복하는 것입니다.

public class ExceptionInfo 
{ 
    public string Message; 
} 

public static Exception MakeException(List<ExceptionInfo> list) 
{ 
    if (list == null || list.Count == 0) 
     throw new ArgumentNullException("list"); 

    Exception ex = new ApplicationException(list.Last().Message); 
    if (list.Count >= 2) 
     for (int i = list.Count - 2; i >= 0; i--) 
      ex = new Exception(list[i].Message, ex); 
    return ex; 
} 
+0

와우, 그래서 당신은 그것을 뒤로해야합니다. 그거 멋지다 – Earlz

관련 문제