位标志始终包含 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。
当您将Flags
添加为枚举的属性并且值为 0 时,如果使用 &
过滤掉这些值,它将始终包含在内。
这是因为始终设置所有必需的位(在这种情况下没有)。
如果要
使用带有 Flags
属性的枚举,则仅在具有排除所有其他选项的选项(例如 None
)时才使用值 0。然后,使用以下方法对其进行测试:
if (myOptions == Options.Na)
测试方式:
if ((myOptions & Options.Na) == Options.Na)
当然,总是会返回真。
现在这个名字Na
表明它排除了所有其他选项,那么问题出在哪里呢?