«Таблица поиска функций» вместо переключателей

Недавно я наткнулся на код, который заменяет использование переключателей жестким кодированием

Dictionary<string (or whatever we would've been switching on), Func<...>> 

и где бы ни был переключатель, он вместо этого dict ["value"]. Invoke (...). Код в чем-то кажется неправильным, но в то же время методы выглядят немного чище, особенно когда есть много возможных случаев. Я не могу дать никаких объяснений, почему это хороший или плохой дизайн, поэтому я надеялся, что кто-то может дать какие-то причины для поддержки / осуждения такого кода. Есть ли прирост в производительности? Потеря ясности?

Пример:

public class A {
    ...
    public int SomeMethod(string arg){
        ...
        switch(arg) {
            case "a": do stuff; break;
            case "b": do other stuff; break;
            etc.
        }
        ...
    }
    ...
}

становится

public class A {

    Dictionary<string, Func<int>> funcs = new Dictionary<string, Func<int>> {
        { "a", () => 0; },
        { "b", () => DoOtherStuff(); }
        ... etc.
    };

    public int SomeMethod(string arg){
        ...
        funcs[arg].Invoke();
        ...
    }
    ...
}
7
задан Roly 10 March 2011 в 15:34
поделиться