2014-03-25 41 views
0

因此,我有一个对象列表,在本例中为ExceptionInfo。这些对象包含要放入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