【发布时间】:2012-02-09 17:48:31
【问题描述】:
我有三个枚举,它们 - 组合起来 - 应该确定一个独特的事态。
枚举结构,一些位字段,其他不是
enum KeyCode
{
A,
B,
C,
D,
E
}
[Flags]
enum KeyModifiers
{
Empty = 0,
NoModifiers = 10000,
Shift = 20000,
Control = 40000,
Alt = 80000
}
enum KeyState
{
Empty = 0,
Down = 10000000,
Up = 20000000
}
我想实现一个包含该状态的类,并提供一个Contains 方法,这将使我能够以某种方式将这些枚举的组合视为支持按位运算的单个值。 em>
但目前的实现不起作用,我相信是因为一些底层枚举不是位字段。
包含因 KeyCode 而不起作用
class KeyEvent
{
public KeyEvent(KeyCode key, KeyState down = KeyState.Empty, KeyModifiers modifiers = KeyModifiers.Empty)
{
Key = key;
State = down;
Modifiers = modifiers;
}
public int Id
{
get
{
return (int)Key + (int)State + (int)Modifiers;
}
}
public KeyCode Key { get; set; }
public KeyState State { get; set; }
public KeyModifiers Modifiers { get; set; }
public bool Contains(KeyEvent comparable)
{
return (Id & comparable.Id) == comparable.Id;
}
}
我怎样才能实现我的目标,即能够将这些枚举(thisKeyEvent)的当前值与这些枚举值的输入集(作为另一个KeyEvent)进行比较,所以至于判断输入值是否包含在当前实例中(但不一定等于)?
- 我可以简单地分别比较枚举,但有更好的解决方案吗?
- 我不想创建第四个枚举,它以按位方式组合所有其他三个枚举,as KeyData does for KeyCode and modifiers
【问题讨论】:
标签: c# .net enums keyboard bit-manipulation