4
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;
}

试图进入一个局部变量当前类的内容。由于字符串的工作方式(表现得像值类型),我不能使用字典。有什么方法可以重构它,以便不需要这么多行来找到所选的液体类?

4

3 回答 3

8

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

var liquidClass = Settings.Default[cmbLiquidClass.Text].ToString();
于 2012-12-13T21:40:56.680 回答
1

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

Dictionary<string, Func<string>> stringsToSettings = new ...
stringsToSettings.Add("LiquidClass1", () => Settings.Default.LiquidClass1);

var liquidClass = stringsToSettings["LiquidClass1"]();
于 2012-12-13T21:30:45.557 回答
0

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

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

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

于 2012-12-13T21:35:31.343 回答