位标志始终包含0值

时间:2013-01-26 16:32:28

标签: c# enums bitflags

所以我来到了这段代码:

[Flags]
public enum Options
{
    NA = 0,
    OptionA = 1,
    OptionB = 2,
    OptionC = 4
}

现在,技术上“NA”无效,如果用户不想选择任何选项,他们就不会选择任何选项,并且它将保存到可以为空的int。没有“无”选项。但是,每当用户选择选项A-C时,NA也将始终添加。如果我更改NA = 1,然后OptionC = 8,则一切正常。那部分是有道理的。但是,如果NA = 0

,NA将永远包含在用户的选项列表中

编辑:

要清除一些内容,NA是独占的,但如果我在哪里选择OptionB,那么当我查看所选的选项时,它会显示我选择了NA和OptionB。

2 个答案:

答案 0 :(得分:3)

如果您在枚举中添加Flags作为属性,并且在0中添加值,则将始终包含,如果您使用&过滤价值观。

这是因为所有必需的位(在这种情况下都没有)总是被设置。

答案 1 :(得分:2)

如果您打算使用带有Flags属性的枚举,那么只有使用不包含所有其他选项的选项(例如None)时才使用值0 。然后用:

进行测试
if (myOptions == Options.Na)

测试:

if ((myOptions & Options.Na) == Options.Na)

当然,总会回归真实。

现在名称Na表明它不包含所有其他选项,那么问题是什么?