通过迭代将对象列表转换为嵌套的对象集

时间:2014-03-25 16:45:11

标签: c# recursion nested iteration

所以,我有一个对象列表,在本例中是ExceptionInfo。这些对象包含要放入Exception对象的信息。但是,Exceptions是嵌套的,分配Exception对象的InnerException属性的唯一方法是在构造时指定它。

所以,我喜欢这样的事情:

    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 个答案:

答案 0 :(得分: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;
}