我确实看了下面这个问题 How to refactor this huge switch statement?
我正在重构一个代码,该代码在aspx页面的Page_Load事件处理程序中有一个巨大的switch语句。
代码是这样的
string switchValue = GetSwitchValue();
switch(switchValue)
{
case "switchValue1" :
stopwatch.Restart();
HandlerForSwitchValue1();
stopwatch.Stop();
LogDetails();
break;
case "Foo" :
stopwatch.Restart();
HandlerForFoo();
stopwatch.Stop();
LogDetails();
break;
...
...
...
}
我打算创建另一个班级,说“处理程序”和#39;它将包含字符串字典和Action委托。
IDictionary<string, Action> actionMaps = new Dictionary<string, Action>();
我的问题是,我在哪里填写字典?如果我在“处理程序”中填充它。类,如何访问后面的aspx代码中定义的私有处理程序方法?
另一个选项是在后面的代码中填充Dictionary。像这样的东西
Handlers.Add("SwitchValue1", HandlerForSwitchValue1);
Add方法或我给它命名的任何方法都会将这些项目添加到&#39; Handler的类中的字典中。
现在我将有100行看起来像这样。我又能从中得到什么?
Handlers.Add("SwitchValue2", HandlerForSwitchValue2);
答案 0 :(得分:3)
除非映射在运行时更改,否则您可以将static readonly
字典创建为类的字段,并从该类的构造函数初始化该字段。
如果希望映射在运行时是动态的,则可以在类中使用static
属性。该属性的后备存储也可以在类构造函数中初始化。