我在我编写的自定义控件上有一个属性,它是一个基于标志的枚举。我创建了自己的自定义控件来以一种符合逻辑的方式编辑它,并从我自己的UITypeEditor中调用它。问题是,当我试图存储的值是标志的组合时,Visual Studio会生成一个错误,它告诉我该值是无效的。
示例:
public enum TrayModes
{
SingleUnit = 0x01
, Tray = 0x02
, Poll = 0x04
, Trigger = 0x08
};如果我想要保存的值是SingleUnit | Trigger,则生成的值是9。这反过来会产生以下错误:

发布于 2013-03-27 23:58:29
您必须在枚举声明之前添加[Flags]
[Flags]
public enum TrayModes
{
SingleUnit = 0x01
, Tray = 0x02
, Poll = 0x04
, Trigger = 0x08
};考虑使用HasFlag函数来检查设置的标志
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的枚举的值的所有可能组合:
0 - Black
1 - Red
2 - Green
3 - 3
4 - Blue
5 - 5
6 - 6
7 - 7
8 - 8枚举的值与FlagsAttribute的所有可能组合:
0 - Black
1 - Red
2 - Green
3 - Red, Green
4 - Blue
5 - Red, Blue
6 - Green, Blue
7 - Red, Green, Blue
8 - 8发布于 2013-03-27 23:48:50
在枚举上使用Flags属性可以防止错误的发生。这对我来说是个谜,因为在没有标志的情况下存储ORed枚举是有效的,并且可以在代码中完成(使用适当的强制转换)。
https://stackoverflow.com/questions/15663166
复制相似问题