在C#中存储方法列表

时间:2010-09-22 09:33:25

标签: c# .net .net-3.5

我有一个方法列表,我想按特定顺序调用。因此,我希望将它们存储在有序列表或具有指定索引的表中。这样,列表将是唯一可以改变我们想要更改呼叫顺序的日子。

我发现this article解释了如何使用数组和委托来完成它。但我在评论和其他一些地方读到它也可以使用Dictionary和LinQ来完成。有什么建议吗?

5 个答案:

答案 0 :(得分:35)

您可以定义Action个对象,这些对象是返回void的无参数委托。每个动作都是指向方法的指针。

// Declare the list
List<Action> actions = new List<Action>();

// Add two delegates to the list that point to 'SomeMethod' and 'SomeMethod2'
actions.Add( ()=> SomeClass.SomeMethod(param1) );
actions.Add( ()=> OtherClass.SomeMethod2() );

// Later on, you can walk through these pointers
foreach(var action in actions)
    // And execute the method
    action.Invoke();

答案 1 :(得分:7)

Queue<Action>怎么样?

var queue = new Queue<Action>();

queue.Enqueue(() => foo());
queue.Enqueue(() => bar());

while(queue.Count != 0)
{
    Action action = queue.Dequeue();
    action();
}

答案 2 :(得分:3)

为什么不考虑使用Queue它的FIFO,在[{1}}中存储代理,当您致电Queue时,它会以指定的方式调用您的方法。

如果使用Multicast Delegate,它会将委托存储在LinkList中,因此当您调用Invoke()时,它将以指定的方式调用。

答案 3 :(得分:0)

我建议看看Command pattern。希望这就是你要找的东西。

答案 4 :(得分:0)

您可以使用符合您需求的List<>

delegate void MyFunction(...);
List<MyFunction> delegateList;

如果您的代理人返回无效,则可以使用event。可以将多个代理添加到单个事件调用列表中,并按照添加的顺序进行调用。

delegate void MyEvent(...);
event MyEventEventHandler MyEvent;

Dictionary order is undefined这意味着要进行查找。