我有一个方法列表,我想按特定顺序调用。因此,我希望将它们存储在有序列表或具有指定索引的表中。这样,列表将是唯一可以改变我们想要更改呼叫顺序的日子。
我发现this article解释了如何使用数组和委托来完成它。但我在评论和其他一些地方读到它也可以使用Dictionary和LinQ来完成。有什么建议吗?
答案 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这意味着要进行查找。