Статический словарь, содержащий делегатов для методов экземпляра

У меня есть этот метод с огромным оператором 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);
}
7
задан M4N 12 August 2011 в 06:40
поделиться