请问如何检测类型为位域的enum变量内容?

屡败屡战数马援 2006-11-25 02:00:59
看了MSDN,也在网上找了,都没有发现有效的办法。

一个enum类型如下

using System;

[Flags]
public enum Operation
{
Nothing = 0x0,
DoSomething1 = 0x1,
DoSomething2 = 0x2,
DoSomething3 = 0x4,
DoSomething4 = 0x8,
}

那么,一个已经赋值的枚举变量,如何判断它含有哪些枚举值?
如:

Operation op = Operation.DoSomething2 | Operation.DoSomething3 | Operation.DoSomething4;

那么,当前变量 op 有三个枚举内容,请问如何在代码中检测出?
...全文
221 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
james_hunter 2006-11-25
  • 打赏
  • 举报
回复
应该这样设计:
public enum Operation
{
Nothing = 0x0,
DoSomething1 = 0x1,
DoSomething2 = 0x2,
Do1And2 = 0x3,
DoSomething3 = 0x4,
Do1And3 = 0x5,
Do2And3 = 0x6,
Do1And2And3 = 0x7,
DoSomething4 = 0x8,
}
不过,实际上,如果太多东西的话,不建议设计成枚举变量,因为最后不好命名。
Ivony 2006-11-25
  • 打赏
  • 举报
回复
所有的判断,结果只有真和假两种,你想进行何种判断?
runrunrun 2006-11-25
  • 打赏
  • 举报
回复
一个一个检测

if( (op & Operation.DoSomething1) != 0 )
if( (op & Operation.DoSomething2) != 0 )
if( (op & Operation.DoSomething3) != 0 )
if( (op & Operation.DoSomething4) != 0 )
  • 打赏
  • 举报
回复
@ Ivony() :
我说的意思是我在做一个Console类型项目,这个Operation枚举对应的是这个项目的参数。
项目使用参数来控制要操作的行为。

那么首先检查参数后生成一个类型为Operation的枚举变量,然后传递到专门的执行操作的类实例中操作。

但是我无法确定要执行哪些操作,操作总共有十几种,可能是全部这十几种都操作,也有可能其中一部分,或者单项操作。那么负责执行操作的类必须要检测这个Operation类型所包含的项。
所以才提出这个问题。
Ivony 2006-11-25
  • 打赏
  • 举报
回复
没看明白……
op == Operation.DoSomething2 | Operation.DoSomething3 | Operation.DoSomething4
不行么?
ivorstar 2006-11-25
  • 打赏
  • 举报
回复
要检测出三个值作什么用呢?

op.toString("F")就能列出这三个值。内部实现也是一位一位的去匹配,应该也没什么更好的办法了。我觉得一般bit flag只是用来检查确定的某几位是否为真,(op & Operation.DoSomething2) != 0就够了,即使检测出op包含了哪些位,也很难用它去控制程序逻辑啊
llyzcy 2006-11-25
  • 打赏
  • 举报
回复
up
阿牛138588 2006-11-25
  • 打赏
  • 举报
回复
值相加得到特定的结果表示含有特定的值,这也是为什么值会是1+n(n-1)次方
yinliaobao 2006-11-25
  • 打赏
  • 举报
回复

111,120

社区成员

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

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

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