судя по всему вы пытаетесь получить такое поведение. Но да, выглядит как не лучшее решение. Только я не понимаю откуда такая категоричность про использование switch
public class Class1
{
private readonly Action _action;
public Class1(string actionName)
{
switch (actionName)
{
case "1":
_action = Action1;
break;
case "2":
_action = Action2;
break;
default:
throw new Exception($"Unexpected action name {actionName}");
}
}
public void Act()
{
_action.Invoke();
}
private void Action1()
{
// ...
}
private void Action2()
{
// ...
}
}