У меня есть этот метод с огромным оператором switch вроде этого:
public bool ExecuteCommand(string command, string args)
{
bool result = false;
switch (command)
{
case "command1": result = Method1(args); break;
case "command2": result = Method2(args); break;
// etc.
}
return result;
}
private bool Method1(string args) {...}
Теперь я подумал о замене этого словаря Func <>
делегатов, чтобы я мог исключить оператор switch:
private Dictionary<string, Func<string, bool>> _commands = new ...;
public MyClass()
{
_commands.Add("command1", Method1);
// etc:
}
public bool ExecuteCommand(string command, string args)
{
return _commands[command](args);
}
Я вижу здесь проблему в том, что создается новый словарь и заполняется каждым новым экземпляром MyClass.
Можно ли каким-то образом сделать этот словарь (содержащий делегатов) в методы экземпляра) статический член, который будет инициализирован только один раз в статическом конструкторе?
Например что-то вроде этого (не работает):
private static Dictionary<string, Func<string, bool>> _commands = new ...;
static MyClass()
{
// the following line will result in a compiler error:
// error CS0120: An object reference is required for the non-static field,
// method, or property 'MyClass.Method1(string, string)'
_commands.Add("command1", MyClass.Method1);
}