Switch语句:并非所有代码路径都返回一个值

Jan*_*cci 0 c# switch-statement

我有一个枚举定义如下:

public enum CrystalTypeEnum { Red, White, Blue, Green };
Run Code Online (Sandbox Code Playgroud)

我有一个静态函数,它返回给定枚举值的字符串表示形式:

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

当我编译我的代码时,我收到以下错误:

CrystalType.toString(CrystalType.CrystalTypeEnum):并非所有代码路径都返回值

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

Adr*_*der 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
} 
Run Code Online (Sandbox Code Playgroud)


Pet*_*hie 6

如果没有default:控制转移到switch语句之外(对于未由case处理的值).这意味着如果你没有a,default:那么在switch之后需要一个return语句,它返回由方法的返回类型定义的类型的值.

  • 不,这不是必需的.但是,总是必须有一条非处理值的路径.这是因为编译器确实没有检查枚举的值.例如,你可以调用你的方法`toString((CrystalTypeEnum)666)`它仍然可以编译.因此,您需要一个默认路径,或者需要编译的switch语句之外的代码. (4认同)