【问题标题】:How to I chain methods from a list so that the result from one becomes the input of the next?如何链接列表中的方法,以便一个结果成为下一个的输入?
【发布时间】:2015-04-25 15:03:53
【问题描述】:

我有一个包含执行方法的处理器对象列表。现在我想从列表中按顺序执行每个处理器。执行(),但希望一个结果成为下一个的输入,依此类推,直到列表中的最后一个成为最终结果。

我的代码是这样的

    private IDocument Execute(IDocument document, List<IProcessor> processors)
    {
        IDocument result = document;
        foreach (IProcessor p in processors)
        {
            result = p.Execute(document);
        }

        //return result;
    }

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

【问题讨论】:

标签: c# .net


【解决方案1】:

我假设您想输入更新后的 result 变量作为输入:

private IDocument Execute(IDocument document, List<IProcessor> processors)
{
    IDocument result = document;
    foreach (IProcessor p in processors)
    {
        result = p.Execute(result);
    }                      // ^ here

    return result;
}

您可以使用 LINQ 更简洁地表达您的方法:

private IDocument Execute(IDocument document, List<IProcessor> processors)
{
    return processors.Aggregate(document, (res, proc) => proc.Execute(res));
}

【讨论】:

  • 谢谢,我选择这个是因为您还提供了使用 LINQ 的替代方案。我不敢相信它是如此简单。 :)
【解决方案2】:

简单。不要将原始的document 传递给每个处理器,而是传递result(这是前一个处理器的结果)。 那个处理器的结果然后成为下一个处理器的下一个输入,依此类推。

IDocument result = document;
foreach (IProcessor p in processors)
{
    result = p.Execute(result);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2019-03-13
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 2021-11-22
    相关资源
    最近更新 更多