You could design your own event class as following:
public class EventArgumentPair<T>
{
public Action<T> Event;
public T Argument;
public EventArgumentPair(Action<T> evt, T arg)
{
this.Event = evt;
this.Argument = arg;
}
}
public class EventList<T>
{
private List<EventArgumentPair<T>> delegates = new List<EventArgumentPair<T>>();
public void Register(Action<T> evt, T arg)
{
delegates.Add(new EventArgumentPair<T>(evt, arg));
}
public void CallEvents()
{
foreach (EventArgumentPair<T> del in delegates)
{
// Execute event
del.Event(del.Argument);
}
}
}
This way you have the arguments linked to the specified events/delegates.
Use the class as shown below:
static EventList<int> events = new EventList<int>();
static void Main(string[] args)
{
events.Register(Print, 7);
events.Register(Print, 55);
events.Register(Print, 61);
events.CallEvents();
Console.ReadLine();
}
static void Print(int i)
{
Console.WriteLine("Called: " + i);
}
The code above outputs the following:
Called: 7
Called: 55
Called: 61
Let me know if that was your goal.