Сохраните методы как Delegate
внутри List или Array и используйте DynamicInvoke
для их вызова - обратите внимание, что вам нужно будет передать правильное число (и тип) переменных.
var delegates = new List<Delegate>();
delegates.Add((Action<int, float, object[]>)Foo);
//...
delegates[0].DynamicInvoke(new[] {0, 1.2, new object()});
Это решение лучше всего подходит, когда вы хотите передать значения по умолчанию (читай: ноль / ноль) методам - тогда вы можете использовать отражение для создания значений по умолчанию.
Еще один полезный случай - если вы хотите вызвать сигнатуру определенного метода (то есть метод, который получает один int), вы можете перейти к нужному индексу и проверить (используя отражение), может ли делегат вызываться с этим аргументом.
В противном случае вам нужно иметь некоторые знания о методе, который вы вызываете, потому что у каждого метода свой тип и номер аргумента.