通过迭代将对象列表转换为嵌套的对象集合
本文关键字:对象 嵌套 集合 转换 列表 迭代 | 更新日期: 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;
}