新建个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//错误

解决方案 »

  1.   

    我都没用过-=操作,我都是用 |=和&=操作,因为这样的enum只能进行位操作,而不是算数操作。
      

  2.   

    Enum的运算通常涉及到位运算(AND、OR、XOR)按位运算
      

  3.   

    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;           // 错误
      

  4.   

    两个 Enum 类型的变量相减的结果为 int,这点和 byte 类型的变量相减类似。但两个 Enum 类型的变量不能相加,这和 byte 类型是不同的。
      

  5.   

    两个枚举变量相减的意思就是它们之间相隔多远,结果是 int。
    两个枚举变量相加就没有明显的、自然的意义了,所以不允许。正如两个 DateTime 型的变量相减的意思是时间间隔,结果是 TimeSpan 型的变量,
    而两个 DateTime 型的变量相加没有意义,不允许。
      

  6.   

    只能做-=不能做+=是防止2个操作符结果混淆起来
    enum TU : uint
    {
        A=0,
        B=0x7fffffff,
        C=0x80000001,
    }TU t = TU.A;
    t -= TU.B;
    t += TU.C;
    如果+=,-=2个都可以,那上面2行结果都为TU.C,比较困惑,所以不允许+=还是比较明智的。