位标志始终包含 0 值

本文关键字:包含 标志 | 更新日期: 2023-09-27 17:56:13

所以我遇到了这段代码:

[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是排他性的,但是如果我在哪里选择选项B,那么当我查看选定的选项时,它将显示我选择了NA和选项B。

位标志始终包含 0 值

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

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

如果要

使用带有 Flags 属性的枚举,则仅在具有排除所有其他选项的选项(例如 None)时才使用值 0。然后,使用以下方法对其进行测试:

if (myOptions == Options.Na)

测试方式:

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

当然,总是会返回真。

现在这个名字Na表明它排除了所有其他选项,那么问题出在哪里呢?