我有一个包含execute方法的处理器对象列表。现在我想从List中按顺序执行每个processor.Execute(),但希望一个的结果成为下一个的输入,依此类推,直到列表中的最后一个成为最终结果。
我的代码就像这样
private IDocument Execute(IDocument document, List<IProcessor> processors)
{
IDocument result = document;
foreach (IProcessor p in processors)
{
result = p.Execute(document);
}
//return result;
}
我没有提前知道列表中有多少处理器,但它们都是相同的(即执行方法的方法签名都是相同的)
答案 0 :(得分:5)
我假设您想要将更新的Continuous2D
变量作为输入提供:
result
您可以使用LINQ更简洁地表达您的方法:
private IDocument Execute(IDocument document, List<IProcessor> processors)
{
IDocument result = document;
foreach (IProcessor p in processors)
{
result = p.Execute(result);
} // ^ here
return result;
}
答案 1 :(得分:2)
简单。不是将原始document
传递给每个处理器,而是传递result
(这是前一个处理器的结果)。然后 处理器的结果成为下一个处理器的下一个输入,依此类推。
IDocument result = document;
foreach (IProcessor p in processors)
{
result = p.Execute(result);
}