枚举类型的逻辑运算符

5

给定一个有4个元素的枚举

enum fontType {bold,italic,underlined,struck}

还有两个变量是枚举类型,它们分别被赋值为 enum1 和 enum2 ,如下所示:

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

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

2
https://dev59.com/i3VD5IYBdhLWcg3wWKPc - user1047100
1个回答

11

如果您要将枚举用作位图,请为成员提供使用不同位的值:

[Flags]
enum MyEnum
{
   Bold = 0x01,
   Italic = 0x02,
   Underlined = 0x04,
   Struck = 0x08
}

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

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


9
同时在枚举上加上[Flags]标记。 - Roy Dictus
是的,如果省略 [Flags],那么 .ToString() 的功能就不如它应该的那样好用了(它只会给你数值而不是每个设置的标志名称)。 - Matthew Watson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接