1

我想写一系列相互调用的代表。它有点像多播委托,但并非如此——它是“串行”的串行需求。每个委托的内部逻辑表明,每个后续调用必须来自先前的委托,而不是来自编组机制。

示例

    [Test]
    public void Test2() {
        Action a = () => {
            Action b = () => {
                Action c = () => {
                    Console.WriteLine("test");
                };
                c.Invoke();
            };
            b.Invoke();
        };
        a.Invoke();
    }

这看起来可以通过 codegen 实现,但我不想那样做。

有任何想法吗?

4

1 回答 1

0

代表的链接列表怎么样?像这样的东西:

public class Node
{
    protected Node Next { get; private set; }

    private Delegate m_actionDel;
    private object[] m_args;

    public Node(Node next, Delegate actionToPerform)
    {
        Next = next;
        m_actionDel = actionToPerform;
    }        

    public void InvokeChain()
    {
        try
        {
            m_actionDel.DynamicInvoke(m_args);
        }
        catch(Exception e)
        {
            // handle exception
        }

        if (Next != null)
            Next.InvokeChain();
    }
}

这只是一个草稿,我还没有真正编译或运行这段代码,但它应该给你一个想法。

于 2012-04-24T20:39:59.883 回答