0

我有一个enum这样的定义:

[Flags]
public enum NodeLevel
{
    Root = 1,
    GroupLevel = 2,
    DeptLevel = 4,
    ClassLevel = 8,
    SubclassLevel = 16
}

我已将其定义为Flags可以对它们执行按位运算。现在我需要能够从关卡中“减 1”,以便给定一个特定关卡,我可以检索到下一个关卡。例如,一个对象包含一个值,NodeLevel.ClassLevel我需要发送NodeLevel.DeptLevel给一个方法。

由于NodeLevel newLevel = currentLevel - 1;不起作用,有没有人对我如何做到这一点有建议?我想这是一件非常简单的事情,但我的大脑现在不会想出它。

我正在使用.NET 2.0。

4

2 回答 2

5

假设您只有一个标志,您可以通过适当的转换除以 2:

NodeLevel newLevel = (NodeLevel) ((int)currentLevel / 2);

(有趣的是,您可以在没有任何转换的情况下进行加减运算……但是乘法、除法、移位等需要双向转换。)

于 2012-12-05T22:09:41.347 回答
5

您也可以使用右移运算符。

NodeLevel newLevel = (NodeLevel) ((int)currentLevel >> 1)
于 2012-12-05T22:12:10.567 回答