关于C#:枚举上的逻辑运算符

Logical operators on enums

本问题已经有最佳答案,请猛点这里访问。

给定一个包含4个元素的枚举

1
enum fontType {bold,italic,underlined,struck}

这个枚举类型的两个变量,称为Enum1和Enum2,分配如下

1
2
fontType enum1=fontType.bold | fontType.italic;
fontType enum2=fontType.underlined & fontType.struck;

为什么输出上的enum1='italic'和enum2='underlined'?


如果要将枚举用作这样的位图,则需要为成员提供使用不同位的值:

1
2
3
4
5
6
7
8
[Flags]
enum MyEnum
{
   Bold = 0x01,
   Italic = 0x02,
   Underlined = 0x04,
   Struck = 0x08
}

默认情况下,它们被赋予了数字0、1、2、3——第一个什么也不做,第二个数字与最后一个数字重叠。

正如注释中所提到的,您还应该将[Flags]属性添加到枚举定义中,这样,如果您执行ToString()操作,您将得到一个格式正确的结果(并且每个人都知道您如何使用枚举),但是,如果您不这样做,它的工作方式将不会受到影响。


你用的是位运算符,它们就是这样做的。