• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

请问如何检测类型为位域的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 有三个枚举内容,请问如何在代码中检测出?
...全文
154 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2006-11-25 02:00
社区公告

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