如何重构这个switch语句?

string liquidClass = string.Empty; switch (cmbLiquidClass.Text) { case "LiquidClass1": liquidClass = Settings.Default.LiquidClass1; break; case "LiquidClass2": liquidClass = Settings.Default.LiquidClass2; break; case "LiquidClass3": liquidClass = Settings.Default.LiquidClass3; break; case "LiquidClass4": liquidClass = Settings.Default.LiquidClass4; break; case "LiquidClass5": liquidClass = Settings.Default.LiquidClass5; break; case "LiquidClass6": liquidClass = Settings.Default.LiquidClass6; break; case "LiquidClass7": liquidClass = Settings.Default.LiquidClass7; break; case "LiquidClass8": liquidClass = Settings.Default.LiquidClass8; break; case "LiquidClass9": liquidClass = Settings.Default.LiquidClass9; break; } 

试图获取当前类的内容的局部变量。 由于字符串的工作方式(行为类似于值类型),我无法使用字典。 有没有办法重构这个,以便它不需要这么多行来找到所选择的液体类?

您可以使用属于Settings.Default (使用.Net 4.0测试)的索引器:

 var liquidClass = Settings.Default[cmbLiquidClass.Text].ToString(); 

您可以使用一些lambda魔法轻松地将其转换为字典。

 Dictionary> stringsToSettings = new ... stringsToSettings.Add("LiquidClass1", () => Settings.Default.LiquidClass1); var liquidClass = stringsToSettings["LiquidClass1"](); 

我假设您正在研究将字符串“转换”为类名的方法。

您可以使用reflection,它允许您按名称查找类,但它很慢,如果您决定在将来的版本中重命名您的类,您的代码将无法正常工作。

另一种方法是在初始化时使用查找词典(诅咒词!),它将每个类绑定到一个字符串。