Недавно я наткнулся на некоторый код, который заменяет использование переключателей на жесткое кодирование
Dictionary<string (or whatever we would've been switching on), Func<...>>
, и где бы он ни был, вместо этого он диктует ["значение"].(...).В некотором роде код кажется неправильным, но в то же время методы выглядят немного чище, особенно когда есть много возможных случаев.Я не могу дать никакого объяснения, почему это хороший или плохой дизайн, поэтому я надеялся, что кто-то может дать некоторые причины для поддержки / осуждения такого рода кода.Есть ли прирост производительности?Потеря ясности?
Пример:
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();
...
}
...
}