为什么在C#中无法对两个枚举类型变量执行加法操作?
C#枚举加法的编译行为差异
首先定义一个枚举类型:
enum MyEnumeration { E1, E2 = 10, E3 } MyEnumeration myEnum = MyEnumeration.E1;
按照C#规范描述,允许对两个枚举类型变量执行加法操作,但以下代码无法编译:
myEnum = myEnum + myEnum;
与之相对,下面两段代码却能正常编译:
myEnum++;
myEnum = myEnum + 20;
原因解析
- 当两个枚举值相加时,编译器会将结果解析为枚举的基础数值类型(默认是
int),而不是枚举类型本身。直接将数值类型赋值给枚举变量会触发编译错误,因为缺少显式类型转换。 myEnum++是枚举的自增操作,编译器会自动处理类型转换,将自增后的数值隐式转换回枚举类型,因此可以正常编译。- 枚举值与整数相加的结果同样是数值类型,但C#允许将数值类型隐式转换到枚举类型(只要数值落在枚举基础类型的范围内),所以
myEnum = myEnum + 20可以通过编译。
如果要让两个枚举相加的代码编译通过,需要显式将结果转换回枚举类型:
myEnum = (MyEnumeration)(myEnum + myEnum);
内容的提问来源于stack exchange,提问作者Leo qiao
相关产品推荐
相关产品推荐

