如何在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))
Tryswitch((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,这不是我最喜欢的事情之一。