gpt4 book ai didi

c# - 标记枚举奇怪的值

转载 作者:行者123 更新时间:2023-11-30 20:15:24 25 4
gpt4 key购买 nike

[Flags]
public enum Direction
{
None = 0x0000,
Left = 0x0001,
Right = 0x0002,
Up = 0x0004,
Down = 0x0008,
Forward = 0x0016,
Backward = 0x0032
}

真的很困惑,我在 if 语句中使用这个枚举,如下所示:

if ((enumValues & Direction.Forward) == Direction.Forward)
{
// do stuff
}

检查集合中是否包含标志。

if ((enumValues & Direction.Right) == Direction.Forward)
{
// do stuff
}

继续运行此 if ( Direction.Right ) 代码,尽管集合中不包含 Right 标志,我什至用中断调试它并且该值不包含 Direction。正确,但它仍然返回 true 并运行代码段。

我的枚举设置有误还是我查询的值有误?

我通常不使用标志,我只是觉得它们会很好用。

最佳答案

查看您如何定义枚举:

None = 0x0000,
Left = 0x0001,
Right = 0x0002,
Up = 0x0004,
Down = 0x0008,
Forward = 0x0016,
Backward = 0x0032

您混淆了十六进制数和十进制数。

[Flags] 枚举中,枚举值的二进制表示应该是这样的:

0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 1000

在十进制中,是 2 的幂:1、2、4、8、16 等

但是您编写值的方式以 0x 开头,表示十六进制值。因此,您实际上是将枚举大小写的值设置为 十六进制数 1、2、4、8 和 16。

你应该删除那些0x:

None = 0,
Left = 1,
Right = 2,
Up = 4,
Down = 8,
Forward = 16,
Backward = 32

关于c# - 标记枚举奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54840494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com