I have a list of method that I would like to call in a specific order. Therefore I would want to store them either in an ordered list or in a table with a specified index. This way the list would be the only thing to change the day we want to change the call order.
I found this article explaining how to do it using an array and delegates. But I read in the comments and some other places that it could also be done using a Dictionary and or LinQ. Any advices ?
You can define Action
objects, which are parameterless delegates that return void
. Each action is a pointer to a method.
// 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();
How about a Queue<Action>
?
var queue = new Queue<Action>();
queue.Enqueue(() => foo());
queue.Enqueue(() => bar());
while(queue.Count != 0)
{
Action action = queue.Dequeue();
action();
}
Why don't you consider using a Queue
it's FIFO , store delegates in Queue
and when you call Dequeue
it will call your methods in a specified manner.
What about using Multicast Delegate , it stores delegates in a LinkList, so when you call Invoke() , it will be called in a specified manner.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With