如何从列表中链接方法,以便一个方法的结果成为下一个的输入?

时间:2015-04-24 22:04:36

标签: c# .net

我有一个包含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;
    }

我没有提前知道列表中有多少处理器,但它们都是相同的(即执行方法的方法签名都是相同的)

2 个答案:

答案 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);
}