Недавно я наткнулся на код, который заменяет использование переключателей жестким кодированием
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();
...
}
...
}