枚举标志可能具有“无”并且仍然具有标志组合。事实上,通常有标志你必须有 None 表示没有标志。
例如,
    [Flags]
    enum Direction
    {
        None = 0x0,
        East = 0x1,
        North = 0x2,
        West = 0x4,
        South = 0x8
    }
但是......无论如何,您可能只想添加 diaganol 方向......它可以让生活更轻松......
    [Flags]
    enum Direction
    {
        None = 0x0,
        East = 0x1,
        North= 0x2,
        West = 0x4,
        South = 0x8,
        NorthEast = Direction.North | Direction.East,
        NorthWest = Direction.North | Direction.West,
        SouthEast = Direction.South | Direction.East,
        SouthWest = Direction.South | Direction.West
    }
    private bool TestDirection(Direction input, Direction test)
    {
        return ((input & test) == test);        
    }
    private void SomeFunction(Direction d)
    {
        if(TestDirection(d, Direction.North) && TestDirection(d, Direction.West)) // NW
            // do something;
        if(TestDirection(d, Direction.NorthWest)) // NW
            // do something;
    }
我会说这里的第二个 if 案例更容易输入。这种方式的一件事是,如果你这样做
TestDirection(Direction.North, Direction.NorthWest)
它会返回真实的......我不确定你是否想要......但你可能会。这样做可能最简单:
    enum Direction
    {
        None ,
        East ,
        North,
        West ,
        South,
        NorthEast, 
        NorthWest,
        SouthEast, 
        SouthWest
    }
    private void SomeFunction(Direction d)
    {
        if(d == Direction.NorthWest)
                // do something
    }
您可能会发现这比使用标志更容易。总的来说..我会说根据您的应用程序使用您认为最方便的任何一个。标志的另一个有效点是:
Direction d = Direction.North | Direction.West | Direction.East | Direction.South;
这没有多大意义......所以也许你只想使用没有标志的选项。