C# 重构大型Switch语句

C# 重构大型Switch语句,c#,dictionary,delegates,switch-statement,C#,Dictionary,Delegates,Switch Statement,我确实看了下面的问题 我正在重构一段代码,该代码在aspx页面的Page_Load事件处理程序中有一个巨大的switch语句 代码是这样的 string switchValue = GetSwitchValue(); switch(switchValue) { case "switchValue1" : stopwatch.Restart(); HandlerForSwitchValue1(); stopwatch.Stop()

我确实看了下面的问题

我正在重构一段代码,该代码在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;
 ... 
 ... 
 ...
 }
Handlers.Add("SwitchValue1", HandlerForSwitchValue1);
我计划创建另一个类,比如“Handlers”,它将包含字符串字典和动作委托

IDictionary<string, Action> actionMaps = new Dictionary<string, Action>();
Add方法或我命名的任何方法都会将项添加到“Handler”类中的字典中

现在我将有100行,看起来像这样。再说一遍,我能从中得到什么

Handlers.Add("SwitchValue2", HandlerForSwitchValue2);

除非映射在运行时发生更改,否则可以创建一个
静态只读
字典作为类的字段,并从该类的构造函数初始化该字段


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

@Eric。。映射是静态的。所以你建议我在另一节课上编字典。但是如何访问隐藏代码中定义的私有处理程序?请告知我是否正确理解您的建议。@Yogendra:我使用aspx已经有一段时间了,但是您应该能够将静态字段/属性添加到代码隐藏文件中。请注意,编译器会为您创建这样的映射。C#编译器对在字符串上操作的switch语句有特殊处理。它在封面下创建了一本词典。