使用整数测试枚举值的组合

时间:2019-07-09 08:58:02

标签: c#

我以前在实践中已经看到过类似的东西,但是我无法找出这种技术的名称以能够对其进行谷歌搜索。

我想实现这一目标:

public enum Directions
{
    Top = 1,
    Right = 2,
    Bottom = 4,
    Left = 8
}

然后生成这些方向的随机组合:

int combinationOfDirections = Random.Range(1, 15);

..因此最小值可以为1,最大值为15(1 + 2 + 4 + 8)。

我可以使用哪种方法来测试选择了顶部,右侧,底部和左侧的哪种组合。像这样:

// 'includes' is just the English version of what I want to do
if(combinationOfDirections includes Directions.Bottom)

我确定是使用'|'的东西或“&” ..任何帮助都会很热!

谢谢

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作来检查是否包含方向:

public static bool isDirectionAvailable(Directions direction, int value)
{
    return ((int)direction & value) != 0;
}

答案 1 :(得分:1)

如果您有这样的变量:

var dirs = (Directions)combinationsOfDirections;

您可以使用HasFlag()方法检查是否包含单个方向:

bool hasTop = dirs.HasFlag(Directions.Top);

要检查值是否精确是指定的组合,您可以执行以下操作:

bool isExactlyTopAndBottom = dirs == Directions.Top | Directions.Bottom;