重构大型交换机声明

时间:2014-04-21 21:35:35

标签: c# dictionary delegates switch-statement

我确实看了下面这个问题 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);

1 个答案:

答案 0 :(得分:3)

除非映射在运行时更改,否则您可以将static readonly字典创建为类的字段,并从该类的构造函数初始化该字段。

如果希望映射在运行时是动态的,则可以在类中使用static属性。该属性的后备存储也可以在类构造函数中初始化。