Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在switch case中使用Enum来比较string-C#_C#_.net_Enums - Fatal编程技术网

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

如何在switch case中使用Enum来比较string-C#,c#,.net,enums,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: Con

我有一个枚举,如下所示

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

有人能帮上忙吗?

在我看来,您最好的办法是尝试将作为输入的
字符串
值解析为
颜色
值,然后您可以仅基于枚举执行
开关
。您可以使用以下功能执行此操作:

public void ColorInfo(字符串colorName)
{
色锥虫结果;
if(Enum.TryParse(colorName,out tryParseResult))
{
//可以将字符串值解析为有效的颜色值
开关(tryParseResult)
{
//我需要一个类似(colorname==“red”)的检查
外壳颜色。红色:
控制台日志(“红色”);
打破
}
}
其他的
{
//获取的字符串值不是有效的枚举值
//根据需要处理
}
}

在我看来,您最好尝试将作为输入的
字符串
值解析为
颜色
值,然后您可以仅基于枚举执行
切换
。您可以使用以下功能执行此操作:

public void ColorInfo(字符串colorName)
{
色锥虫结果;
if(Enum.TryParse(colorName,out tryParseResult))
{
//可以将字符串值解析为有效的颜色值
开关(tryParseResult)
{
//我需要一个类似(colorname==“red”)的检查
外壳颜色。红色:
控制台日志(“红色”);
打破
}
}
其他的
{
//获取的字符串值不是有效的枚举值
//根据需要处理
}
}

您不能将
枚举
字符串
进行比较,因为它们是不同的类型

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

public void ColorInfo(string colorName)
{
    if (Colors.red.ToString() == colorName)
        Debug.Print("red color");
}
不能使用
switch
语句来进行字符串转换,因为每个
大小写都必须是常量,并且
为彩色。红色。ToString()
不是

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

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");
    }
}

不能将
枚举
字符串
进行比较,因为它们是不同的类型

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

public void ColorInfo(string colorName)
{
    if (Colors.red.ToString() == colorName)
        Debug.Print("red color");
}
不能使用
switch
语句来进行字符串转换,因为每个
大小写都必须是常量,并且
为彩色。红色。ToString()
不是

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

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");
    }
}

尝试
switch((Colors)Enum.Parse(typeof(Colors),colorName))
Try
switch((Colors)Enum.Parse(typeof(Colors),colorName))
Enum.Parse函数将抛出一个异常,即值
colorName
无法解析为
Colors
,使用相同的方法,我们可以使用Enum.TryParse..对吗?当然可以,这就是我的答案。我只是想指出,使用该代码可能会导致抛出意外异常,因为它没有被
try
/
catch
@MickaëlDerriey good point围绕。。。我已经更新为使用try/catch块作为替代,或者您可以使用Enum.TryParse()。
Enum.Parse
函数将抛出一个异常,即值
colorName
无法解析为
Colors
。在谷歌搜索之后,使用相同的方法,我们可以使用Enum.TryParse。。对吗?当然可以,这就是我的答案。我只是想指出,使用该代码可能会导致抛出意外异常,因为它没有被
try
/
catch
@MickaëlDerriey good point围绕。。。我已经更新为使用try/catch块作为替代方法,或者您可以使用Enum.TryParse()。对于这样一个琐碎的概念来说,太冗长了。关于csharp,这不是我最喜欢的事情之一。对于这样一个琐碎的概念来说,太冗长了。关于csharp,这不是我最喜欢的事情之一。