如何在switch case中使用Enum来比较string-C#

时间:2017-02-15 00:52:46

标签: c# .net enums

我有一个类似下面的枚举

public enum Colors
{
    red,
    blue,
    green,
    yellow
}

我想用它切换案例

public void ColorInfo(string colorName)
{
    switch (colorName)
    {
        // i need a checking like (colorname=="red")
        case Colors.red:
            Console.log("red color");
            break;
    }
}

我收到以下错误

 Cannot implicitly convert type 'Color' to string

任何人都可以帮忙...

2 个答案:

答案 0 :(得分:2)

我认为您最好的选择是尝试将string值作为输入解析为Colors值,然后您可以仅根据枚举执行switch 。您可以使用Enum.TryParse<TEnum>函数:

执行此操作
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
    }
}

答案 1 :(得分:0)

您无法将a[0]enum进行比较,因为它们属于不同类型。

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

enum

您不能使用public void ColorInfo(string colorName) { if (Colors.red.ToString() == colorName) Debug.Print("red color"); } 语句进行字符串转换,因为每个switch必须是常量而case不是。

另一种方法是先将字符串转换为Colors.red.ToString(),然后再转换为enum语句进行比较。

switch