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;
}
尝试将当前类的内容输入到局部变量中。由于字符串的工作方式(行为类似于值类型),我无法使用字典。有没有办法重构这个,以便它不需要这么多行来找到所选的液体类?
答案 0 :(得分:8)
您可以使用属于Settings.Default
(使用.Net 4.0测试)的索引器:
var liquidClass = Settings.Default[cmbLiquidClass.Text].ToString();
答案 1 :(得分:1)
您可以使用一些lambda魔法将其轻松转换为字典。
Dictionary<string, Func<string>> stringsToSettings = new ...
stringsToSettings.Add("LiquidClass1", () => Settings.Default.LiquidClass1);
var liquidClass = stringsToSettings["LiquidClass1"]();
答案 2 :(得分:0)
我假设您正在研究将字符串“转换”为类名的方法。
您可以使用反射,它允许您按名称查找类,但速度很慢,如果您决定在将来的版本中重命名您的类,则代码将无效。
另一种方法是在某些初始化时使用查找字典(诅咒字!),它将每个类绑定到一个字符串。