关于.NET:如何在switch case中使用枚举来比较字符串-C#

How to Use Enum in switch case for comparing string- C#

本问题已经有最佳答案,请猛点这里访问。

在下面有一个枚举的类

1
2
3
4
5
6
7
public enum Colors
{
    red,
    blue,
    green,
    yellow
}

我想使用它的开关为例

1
2
3
4
5
6
7
8
9
10
public void ColorInfo(string colorName)
{
    switch (colorName)
    {
        // i need a checking like (colorname=="red")
        case Colors.red:
            Console.log("red color");
            break;
    }
}

我要跟随误差

1
 Cannot implicitly convert type 'Color' to string

我对这个人的帮助。


我认为你最好的办法是把你得到的作为输入的Colors值的string值解析为Colors值,然后你就可以只根据枚举来做switch。您可以通过使用Enum.TryParse函数来完成此操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void ColorInfo(string colorName)
{
    Colors tryParseResult;
    if (Enum.TryParse<Colors>(colorName, out tryParseResult))
    {
        // the string value could be parsed into a valid Colors value
        switch (tryParseResult)
        {
            // i need a checking like (colorname=="red")
            case Colors.red:
                Console.log("red color");
                break;
        }
    }
    else
    {
        // the string value you got is not a valid enum value
        // handle as needed
    }
}


不能将enumstring进行比较,因为它们是不同的类型。

如果要将stringenum描述进行比较,则需要先将其转换为字符串:

1
2
3
4
5
public void ColorInfo(string colorName)
{
    if (Colors.red.ToString() == colorName)
        Debug.Print("red color");
}

不能使用switch语句进行字符串转换,因为每个case必须是常量,而Colors.red.ToString()不是常量。

另一种方法是先将字符串转换为enum,然后再转换为switch语句进行比较。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void ColorInfo(string colorName)
{
    try
    {
        Colors color = (Colors)Enum.Parse(typeof(Colors), colorName);
        switch (color)
        {
            case Colors.red:
                Debug.Print("red color");
                break;
        }
    }
    catch(ArgumentException ex)
    {
        Debug.Print("Unknown color");
    }
}