我有一个枚举属性控制窗体上的按钮显示与否。
现在有一个问题。
比如我的这个属性是
English.A | English.B | English.C
那么我如何把其中的English.B给去掉呢

解决方案 »

  1.   

    开始的时候: button = English.A | English.B | English.C
    然后我需要在代码里面修改button的值
    将其改成
    button = English.A | English.C
    这个该怎么做?
      

  2.   

    你的枚举加flag了没?加了的话s=s & ( English.A |English.C)
      

  3.   


    加了flag。
    但是这种办法不行呢。
    button 这个参数的枚举项会有不同的值。
    我只能确定有English.B,其他的按照不同的方式会有不同的枚举值
      

  4.   

    ( English.A |English.C) 这个是你的例子里呀,如果有很多就要全部都或上,除了那个B不加,就是让B这个位为0,其他都要为1,然后去和原值&
      

  5.   


    我要说的是button这个变量是有不特定数量的枚举值。可能有3个也可能只有1个。
    但是English.B是必然存在的。
    现在的需求是在特定的时候将English.B这个值给移除
      

  6.   

    我晕。。
    我要的不是你那个做法!
    那样的话我会累死。不同的入口会造成button拥有不同的值。
    按照你那样做。我需要根据每个入口写上不同的&代码。你不觉得工作量太大了点??
    要知道我的枚举有30多个项呢?!!
      

  7.   

    不容易,找了这么久,总算找到要怎么写了。
    就一句代码的:
    button = button ^ English.B
      

  8.   

    public static void Test()
    {
        English t = English.A | English.B | English.C;
        Console.WriteLine((int)(t & English.B));
        t &= ~English.B;//去掉B
        Console.WriteLine((int)(t & English.B));
    }public enum English { A, B, C, D, E, F }
      

  9.   


    枚举加一个全部|或 好的值就可以简化了,^ 是异或,只有你确保button已经有English.B是正确的,如果没有那就反了
      

  10.   


    不行的
    我运行测试了一下
    最后得到的t只有一个English.C了,English.A这个值没有了
      

  11.   

    写完整给你,再看不懂不解释了。public static void Test()
    {
        English t = English.A | English.B | English.C;
        Console.WriteLine((int)(t & English.B));
        t &= ~English.B;//去掉B
        Console.WriteLine((int)(t & English.B));
    }public enum English
    {
        A = 1,
        B = 2,
        C = 8,
        D = 16,
        E = 32,
        F = 64
    }
      

  12.   


    用了下,button &= ~English.B和button = button ^ English.B可以得出相同的结果。
    但是button = button ^ English.B会在没有English.B的情况下把English.B给加上。
    button &= ~English.B就没有这个问题