二进制操作非常有用。通过这种方式,我可以| ^ &
按顺序发出新的序列。
但是,有时会有Enum
个附加base 2
值的Enhance || derive|| attach
(或根本没有价值)。
即:
我希望每个条目的if (MyListItemType== Header |Footer ) ...
值为Enum(如果可能)。
所以我可以这样做:
{{1}}
有可能吗?或者是否有任何棘手的工作?
答案 0 :(得分:8)
我想加强||获得||将值附加到每个条目的枚举(如果可能)。
你不能这样做(没有重新定义枚举)。但是当它在代码中你没有拥有时,就结束了。已经存在依赖于编号的代码,更改int值会破坏该代码。
但这通常意味着Enum不是一个有点集,所以试图将它作为一个可能并不是一个好主意。
这是代码创建者的设计决策。
查看您的示例列表:
var item = ListItemType.Header | ListItemType.Footer | ListItemType.SelectedItem;
item
可以同时成为页眉,页脚和所选项吗?这是一个互斥选项列表。
答案 1 :(得分:5)
您想使用flags枚举:
[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
class MyClass
{
Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
}
答案 2 :(得分:4)
不,你不能。
如果Enum
未标记FlagsEnumeration
和/或具有正确的位掩码值(正如您所说 - “没有base2”),则不能使用按位对其进行操作以获得有意义的结果。
答案 3 :(得分:3)
正如其他人所说,无法完成,但我将使用扩展方法的快捷方式:
public enum MyEnum
{
This,
That,
TheOther
}
public static class MyEnumeExtensions
{
public static bool IsAny(this MyEnum enumValue, params MyEnum[] values)
{
return values.Any((e) => e == enumValue);
}
}
所以我可以使用:
myEnum.IsAny(This, That);
几乎您希望实现的目标。
答案 4 :(得分:0)
答案 5 :(得分:0)
[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
http://msdn.microsoft.com/en-us/library/cc138362.aspx
然后,您可以在它们上使用按位运算符。