Учитывая, что все методы находятся внутри одного класса, и вы вызываете функцию MethodWorkA
, используя экземпляр класса, я, честно говоря, не вижу никакой причины в использовании Action<T>
или delegate
как я понял твой вопрос.
Когда я вызываю methodA, я хотел бы передать какой-то параметр, чтобы
иногда он просто делает MethodWork1, а иногда
MethodWork1 и MethodWork2.
Почему бы просто не передать простой параметр MethodWorkA
, например
public class DoWork()
{
public enum ExecutionSequence {CallMethod1, CallMethod2, CallBoth};
public MethodWorkA(List<long> TheList, ExecutionSequence exec)
{
if(exec == ExecutionSequence.CallMethod1)
MethodWork1(..);
else if(exec == ExecutionSequence.CallMethod2)
MethodWork2(..);
else if(exec == ExecutionSequence.Both)
{
MethodWork1(..);
MethodWork2(..);
}
}
public void MethodWork1(parameters) {}
public void MethodWork2(parameters) {}
}
Намного проще и понятнее для вашего класса.
Если это не то, что вы хотите, пожалуйста, объясните.
РЕДАКТИРОВАТЬ
Просто чтобы дать вам представление о том, что вы можете сделать:
Пример:
public class Executor {
public void MainMethod(long parameter, IEnumerable<Action> functionsToCall) {
foreach(Action action in functionsToCall) {
action();
}
}
}
и в коде
void Main()
{
Executor exec = new Executor();
exec.MainMethod(10, new List<Action>{()=>{Console.WriteLine("Method1");},
()=>{Console.WriteLine("Method2");}
});
}
Выход будет
Method1
Method2
Таким образом, вы, например, можете вставить в коллекцию только те функции, которые хотите выполнить. Конечно, в этом случае логика решения (какие функции должны быть выполнены) определяется вне вызова.