小编Clo*_*hUK的帖子

旗帜枚举奇怪的价值观

[Flags]
public enum Direction
{
    None = 0x0000,
    Left = 0x0001,
    Right = 0x0002,
    Up = 0x0004,
    Down = 0x0008,
    Forward = 0x0016,
    Backward = 0x0032
}
Run Code Online (Sandbox Code Playgroud)

真的很困惑,我在if语句中使用这个枚举是这样的:

if ((enumValues & Direction.Forward) == Direction.Forward)
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

检查它是否包含集合中的标志.

if ((enumValues & Direction.Right) == Direction.Forward)
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

if ( Direction.Right )尽管在集合中没有包含Right标志,但仍然运行此代码,我甚至使用中断调试它并且值不包含Direction.Right但它仍然返回true并运行代码段.

我是否设置了枚举错误或者我是否错误地查询了值?

我通常不使用旗帜我只是认为它会很好地利用它们.

c# enums flags

2
推荐指数
1
解决办法
65
查看次数

标签 统计

c# ×1

enums ×1

flags ×1