enum 为什么只可以做-=计算?

BusyDonkey 2010-04-04 11:57:08
新建个enum:

enum TU
{
A=0x01,
B=0x04,
C=0x05,
D=0x15,
E=0x0
}

Tu t=Tu.D;
t-=TU.A;//这是对的
t+=TU.A//错误
t=t+TU.A//错误
t=t-TU.A//错误
...全文
518 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon9090 2010-04-06
  • 打赏
  • 举报
回复
不懂,学习!~~~
guoyichao 2010-04-06
  • 打赏
  • 举报
回复
只能做-=不能做+=是防止2个操作符结果混淆起来
enum TU : uint
{
A=0,
B=0x7fffffff,
C=0x80000001,
}

TU t = TU.A;
t -= TU.B;
t += TU.C;
如果+=,-=2个都可以,那上面2行结果都为TU.C,比较困惑,所以不允许+=还是比较明智的。
  • 打赏
  • 举报
回复
这才是+=运算。
t -= 1;
t += 1;
CMIC 2010-04-04
  • 打赏
  • 举报
回复
我用过枚举直接加减的,不过理论上应该行,枚举应为毕竟是整数。

我才应该是在枚举范围内的就用过是对的,转成2进制值算。
wuyq11 2010-04-04
  • 打赏
  • 举报
回复
Enum的运算通常涉及到位运算(AND、OR、XOR)按位运算
qldsrx 2010-04-04
  • 打赏
  • 举报
回复
我都没用过-=操作,我都是用 |=和&=操作,因为这样的enum只能进行位操作,而不是算数操作。
wuyi8808 2010-04-04
  • 打赏
  • 举报
回复
两个枚举变量相减的意思就是它们之间相隔多远,结果是 int。
两个枚举变量相加就没有明显的、自然的意义了,所以不允许。

正如两个 DateTime 型的变量相减的意思是时间间隔,结果是 TimeSpan 型的变量,
而两个 DateTime 型的变量相加没有意义,不允许。
wuyi8808 2010-04-04
  • 打赏
  • 举报
回复
两个 Enum 类型的变量相减的结果为 int,这点和 byte 类型的变量相减类似。

但两个 Enum 类型的变量不能相加,这和 byte 类型是不同的。
wuyi8808 2010-04-04
  • 打赏
  • 举报
回复
enum TU { A,B,C,D,E }

TU t = TU.D;
t -= TU.A; // 可以
t = (TU)(t - TU.A); // 可以,等价于上行
t = t - TU.A; // 错误


// 类比:

byte b = 78, c = 5;
b -= c; // 可以
b = (byte)(b - c); // 可以,等价于上行
b = b - c; // 错误
ginni215 2010-04-04
  • 打赏
  • 举报
回复
是啊 怕超出范围啊 ,减是可以地~

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧