首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在自定义UITypeEditor中使用OR枚举

在自定义UITypeEditor中使用OR枚举
EN

Stack Overflow用户
提问于 2013-03-27 23:48:50
回答 2查看 351关注 0票数 0

我在我编写的自定义控件上有一个属性,它是一个基于标志的枚举。我创建了自己的自定义控件来以一种符合逻辑的方式编辑它,并从我自己的UITypeEditor中调用它。问题是,当我试图存储的值是标志的组合时,Visual Studio会生成一个错误,它告诉我该值是无效的。

示例:

代码语言:javascript
复制
public enum TrayModes
{ 
    SingleUnit = 0x01
  , Tray = 0x02
  , Poll = 0x04
  , Trigger = 0x08
};

如果我想要保存的值是SingleUnit | Trigger,则生成的值是9。这反过来会产生以下错误:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-27 23:58:29

您必须在枚举声明之前添加[Flags]

代码语言:javascript
复制
[Flags]
public enum TrayModes
{ 
    SingleUnit = 0x01
   , Tray = 0x02
   , Poll = 0x04
   , Trigger = 0x08
};

考虑使用HasFlag函数来检查设置的标志

代码语言:javascript
复制
TrayModes t=TrayModes.SingleUnit|TrayModes.Poll;
if(t.HasFlag(TrayModes.SingleUnit))
//return true

编辑:这是因为带有标志的枚举属性是以一种不同的方式进行处理的,正如您在http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx A中的示例中所看到的,带标志和不带有标志的枚举属性的字符串显示了它们的不同之处

不带FlagsAttribute的枚举的值的所有可能组合:

代码语言:javascript
复制
  0 - Black
  1 - Red
  2 - Green
  3 - 3
  4 - Blue
  5 - 5
  6 - 6
  7 - 7
  8 - 8

枚举的值与FlagsAttribute的所有可能组合:

代码语言:javascript
复制
  0 - Black
  1 - Red
  2 - Green
  3 - Red, Green
  4 - Blue
  5 - Red, Blue
  6 - Green, Blue
  7 - Red, Green, Blue
  8 - 8
票数 0
EN

Stack Overflow用户

发布于 2013-03-27 23:48:50

在枚举上使用Flags属性可以防止错误的发生。这对我来说是个谜,因为在没有标志的情况下存储ORed枚举是有效的,并且可以在代码中完成(使用适当的强制转换)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15663166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档