【问题标题】:Logical operators on enums [duplicate]枚举上的逻辑运算符 [重复]
【发布时间】:2013-12-21 03:46:33
【问题描述】:

给定一个包含 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'?

【问题讨论】:

标签: c# enums


【解决方案1】:

如果您要将枚举用作这样的位图,则需要为每个成员指定使用不同位的值:

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

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

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

【讨论】:

  • ... 以及枚举上的 [Flags]。
  • 是的,如果您省略 [Flags],那么 .ToString() 将无法正常工作(它只是为您提供数值而不是每个设置的标志名称)
猜你喜欢
  • 2018-07-17
  • 2019-04-21
  • 2011-03-14
  • 2020-10-02
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多