是否有更有效的方法通过C#中的switch-case语句运行枚举值而不是这个?

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

Ree*_*sey 7

您可以只切换标签,然后在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)