所以,我有一个对象列表,在本例中是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;
}
我知道理论上可以通过递归实现迭代,但是,我无法看到这将如何应用。我很喜欢这个版本,但出于好奇,是否有可能将其变成一个交互式版本?此外,这甚至可以应用尾调用优化吗?
答案 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;
}