C P*_*ton 4 c# performance switch-statement
我想知道是否有一个更有效(在更简单/更简洁的代码中有效)的方式来制作如下所示的案例陈述......
我有一本字典.它的关键类型是Enum,它的值类型是bool.如果布尔值为true,我想更改表单上标签的颜色.
为示例更改了变量名称.
Dictionary<String, CustomType> testDict = new Dictionary<String, CustomType>();
//populate testDict here...
Dictionary<MyEnum, bool> enumInfo = testDict[someString].GetEnumInfo();
//GetEnumInfo is a function that iterates through a Dictionary<String, CustomType>
//and returns a Dictionary<MyEnum, bool>
foreach (KeyValuePair<MyEnum, bool> kvp in enumInfo)
{
switch (kvp.Key)
{
case MyEnum.Enum1:
if (someDictionary[kvp.Key] == true)
{
Label1.ForeColor = Color.LimeGreen;
}
else
{
Label1.ForeColor = Color.Red;
}
break;
case MyEnum.Enum2:
if (someDictionary[kvp.Key] == true)
{
Label2.ForeColor = Color.LimeGreen;
}
else
{
Label2.ForeColor = Color.Red;
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,MyEnum有8个不同的值...这意味着我有8个不同的case语句..我知道必须有一个更简单的方法来做到这一点,我只是无法在脑海中概念化它.
如果有人能提供帮助,我会非常感激.我喜欢C#而且我每天都在学习新东西......我像海绵一样吸收它:)
-CP
您可以只切换标签,然后在switch语句后设置颜色:
Label label = null;
switch (kvp.Key)
{
case MyEnum.Enum1:
label = Label1;
break;
case MyEnum.Enum2:
label = Label2;
break;
}
label.ForeColor = kvp.Value ? Color.LimeGreen : Color.Red;
Run Code Online (Sandbox Code Playgroud)
或者,您可以拥有一个Dictionary<MyEnum, Label>,然后恰当地查找标签:
labelDictionary[kvp.Key].ForeColor = kvp.Value ? Color.LimeGreen : Color.Red;
Run Code Online (Sandbox Code Playgroud)