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

本文关键字:对象 嵌套 集合 转换 列表 迭代 | 更新日期: 2023-09-27 17:53:02

那么,我有一个对象列表,在本例中是ExceptionInfo。这些对象包含要放入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;
    }

我知道在理论上,迭代可以做到所有递归可以做到的事情,但是,我看不出这在这里是如何应用的。我对这个版本很满意,但出于好奇,有没有可能把它变成一个互动版本?同样,是否有可能应用尾部调用优化?

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

尝试下面不使用递归的示例。主要思想是从列表中的最后一个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;
}