У меня есть этот метод с огромным оператором 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);
}