所以我来到了这段代码:
[Flags]
public enum Options
{
NA = 0,
OptionA = 1,
OptionB = 2,
OptionC = 4
}
现在,技术上“NA”无效,如果用户不想选择任何选项,他们就不会选择任何选项,并且它将保存到可以为空的int。没有“无”选项。但是,每当用户选择选项A-C时,NA也将始终添加。如果我更改NA = 1
,然后OptionC = 8
,则一切正常。那部分是有道理的。但是,如果NA = 0
?
编辑:
要清除一些内容,NA是独占的,但如果我在哪里选择OptionB,那么当我查看所选的选项时,它会显示我选择了NA和OptionB。
答案 0 :(得分:3)
如果您在枚举中添加Flags
作为属性,并且在0中添加值,则将始终包含,如果您使用&
过滤价值观。
这是因为所有必需的位(在这种情况下都没有)总是被设置。
答案 1 :(得分:2)
如果您打算使用带有Flags
属性的枚举,那么只有使用不包含所有其他选项的选项(例如None
)时才使用值0 。然后用:
if (myOptions == Options.Na)
测试:
if ((myOptions & Options.Na) == Options.Na)
当然,总会回归真实。
现在名称Na
表明它不包含所有其他选项,那么问题是什么?