我的枚举定义如下:
public enum CrystalTypeEnum { Red, White, Blue, Green };
我有一个静态函数,它返回给定枚举值的字符串表示形式:
public static string toString(CrystalTypeEnum type)
{
switch (type)
{
case CrystalTypeEnum.Red:
return "Red";
case CrystalTypeEnum.White:
return "White";
case CrystalTypeEnum.Blue:
return "Blue";
case CrystalTypeEnum.Green:
return "Green";
}
}
编译代码时出现以下错误:
CrystalType.toString(CrystalType.CrystalTypeEnum):并非所有代码路径都返回值
为清楚我的switch语句涵盖了(红色,白色,蓝色,绿色)的所有四种情况,为什么会出现此错误。
答案 0 :(得分:6)
您需要指定默认部分。
switch (type)
{
case CrystalTypeEnum.Red:
return "Red";
case CrystalTypeEnum.White:
return "White";
case CrystalTypeEnum.Blue:
return "Blue";
case CrystalTypeEnum.Green:
return "Green";
default:
//return what you need here
}
答案 1 :(得分:6)
如果没有default:
控件被转移到switch语句之外(对于未由case处理的值)。这意味着如果你没有default:
,那么在switch之后需要一个return语句,它返回由方法的返回类型定义的类型的值。
答案 2 :(得分:2)
为清楚我的switch语句涵盖了所有四种情况(红色,白色,蓝色,绿色),为什么会出现此错误。
因为总共有五个案例而不是四个案例。您可以将不是这些定义的枚举值之一的整数转换为CrystalTypeEnum
类型,它仍然有效。
CrystalType.toString((CrystalTypeEnum)(42));
所以在switch语句中,总是需要默认值?
不,只要“所有代码路径都返回一个值”,就可以将return语句放在整个switch
子句之后或其他任何内容。
答案 3 :(得分:2)
不要忘记在switch \ case构造中使用此部分:
switch (type)
{
default:
throw new ArgumentException("Incorrect CrystalTypeEnum");
}
答案 4 :(得分:1)
我知道旁观者发布的答案可能正是您所寻找的,但有一种方法可以做到这一点,不需要任何切换声明。
您可以使用Enum.GetName
方法获取枚举值的字符串表示形式。
请阅读here