0

我有一个枚举定义如下:

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 语句清楚地涵盖所有四种情况(Red, White, Blue, Green)时,为什么我会收到此错误。

4

5 回答 5

7

如果没有default:控制权转移到 switch 语句之外(对于未由 case 处理的值)。这意味着如果您没有default:then 您需要在 switch 之后的 return 语句返回由方法的返回类型定义的类型的值。

于 2012-08-15T04:28:29.000 回答
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
} 
于 2012-08-15T04:24:28.523 回答
3

不要忘记在 switch\case 构造中使用此部分:

switch (type) 
{
    default:
        throw new ArgumentException("Incorrect CrystalTypeEnum");
} 
于 2012-08-15T04:49:09.333 回答
2

当我的 switch 语句明确涵盖所有四种情况(红色、白色、蓝色、绿色)时,为什么会出现此错误。

因为总共有五个案例而不是四个。您可以将不是这些已定义枚举值之一的整数强制转换为CrystalTypeEnum类型,并且它仍然有效。

CrystalType.toString((CrystalTypeEnum)(42));

那么在switch语句中总是需要默认值吗?

不,您可以将 return 语句放在整个switch子句之后,或者只要“所有代码路径都返回一个值”即可。

于 2012-08-15T04:39:57.080 回答
1

我知道 asstander 发布的答案可能是您正在寻找的,但是有一种优雅的方法可以做到这一点,它不需要任何 switch 语句。

您可以使用Enum.GetName方法来获取枚举值的字符串表示形式。请阅读这里

于 2012-08-15T04:37:38.047 回答