0

所以我遇到了这段代码:

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

现在,从技术上讲,“NA”是无效的,如果用户不想选择任何选项,他们就不会选择任何选项,它将保存到可为空的 int。没有“无”选项。但是,任何时候用户选择选项 AC,NA 也总是会被添加。如果我改变NA = 1,那么OptionC = 8,一切正常。那部分是有道理的。但是,如果 NA 将始终包含在用户的选项列表中,NA = 0为什么?

编辑:

为了澄清一些事情,NA是独占的,但是如果我在哪里选择OptionB,那么当我查看选定的选项时,它会显示我选择了NA和OptionB。

4

2 回答 2

3

当您在Flags枚举上添加一个属性和一个值为 0 的值时,如果您用于过滤掉这些值,它将始终包含在内。&

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

于 2013-01-26T16:43:24.670 回答
2

如果您要使用带有Flags属性的枚举,则仅当您有一个排除所有其他选项的选项时才使用值 0(例如None,例如)。然后你测试它:

if (myOptions == Options.Na)

测试:

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

当然,将始终返回 true。

现在这个名字Na暗示它排除了所有其他选项,那么问题是什么?

于 2013-01-26T16:45:21.000 回答