枚举标志可能具有“无”并且仍然具有标志组合。事实上,通常有标志你必须有 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;
这没有多大意义......所以也许你只想使用没有标志的选项。