有一个:

enum SomeEnum
{
    A = 0,
    B = 1,
    C = 2
}

现在编译器允许我写:
SomeEnum x = SomeEnum.A;
switch(x)
{
    case 0: // <--- Considered SomeEnum.A
        break;
    case SomeEnum.B:
        break;
    case SomeEnum.C:
        break;
    default:
        break;
}
0被视为SomeItems.A。但是我不能写:
SomeEnum x = SomeEnum.A;
switch(x)
{
    case 0:
        break;
    case 1: // <--- Here is a compilation error.
        break;
    case SomeEnum.C:
        break;
    default:
        break;
}

为什么0仅存在隐式转换?

最佳答案

ECMA-334 (C# Language Specification)



enum's的默认值为0,并且在编译时知道这就是为什么在switch语句中允许它的原因。对于0以外的值,无法在编译时确定此值是否存在于枚举中。

enum (C# Reference)

关于c# - 为什么switch for enum接受隐式转换为0但不接受任何其他整数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33345201/

10-09 14:02