首页 新闻 搜索 专区 学院

enum操作问题请教

0
悬赏园豆:20 [已解决问题] 解决于 2008-08-04 09:31
<P>[Flags]<BR>public enum PCState<BR>{<BR>&nbsp;&nbsp;&nbsp; None=1,Normal=2,Special=4,InQueue=8<BR>}<BR>有一个该类型的变量 state,它的值如下</P> <P>PCState state=PCState.Normal|PCState.InQueue</P> <P>现在我想将其状态替换为PCState.Special|PCState.InQueue,如果再次给state赋值,我当然是会啦,我这里的意图是,判断state是否有PCState.Normal,如果有将原来state中的PCState.Normal删除,再将PCState.InQueue加入到原来的state变量中</P> <P>就是说PCState.Normal和PCState.InQueue是两个互斥的状态,不能同时存在于一个state变量中</P>
lexus的主页 lexus | 初学一级 | 园豆:0
提问于:2008-08-03 22:33
< >
分享
最佳答案
0
我实现了你所说的两个函数,不知道是不是你想要的 [Flags] public enum PCState { None = 1, Normal = 2, Special = 4, InQueue = 8 } class Test { public PCState ChangeStateToSpecial(PCState curState, PCState special) { PCState ret = curState; if ((ret & PCState.Normal) == PCState.Normal) { ret &= ~PCState.Normal; } return ret | special; } public PCState ChangeStateToNormal(PCState curState, PCState special) { PCState ret = curState; if ((ret & special) == special) { ret &= ~special; } return ret | PCState.Normal; } } 调用: static void Main(string[] args) { Test test = new Test(); PCState state=PCState.Normal|PCState.InQueue; Console.WriteLine(state); state = test.ChangeStateToSpecial(state, PCState.Special); Console.WriteLine(state); state = test.ChangeStateToNormal(state, PCState.Special); Console.WriteLine(state); } 输出: Normal, InQueue Special, InQueue Normal, InQueue
eaglet | 专家六级 |园豆:17119 | 2008-08-04 07:46
其他回答(2)
0
你的问题没有描述清楚. 只讲了Normal和InQueue,那么Special又是如何牵扯到你的规则里的?
deerchao | 园豆:8167 (大侠五级) | 2008-08-03 22:38
0
重新赋值不就把PCState.Normal删除了吗?没看明白你想做什么?我觉的你的目的就是不想Normal和InQueue同时存在,不是吗? if (state == (PCState.Normal | PCState.InQueue)) { state = PCState.Special | PCState.InQueue; } 或者 if (state == (PCState.Normal | PCState.InQueue)) { state = PCState.InQueue; } 不能这样写?
TerryLee | 园豆:3300 (老鸟四级) | 2008-08-03 23:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册