如何从标志型枚举中"减1"?

Sid*_*and 0 c# enums .net-2.0

我有这样的enum定义:

[Flags]
public enum NodeLevel
{
    Root = 1,
    GroupLevel = 2,
    DeptLevel = 4,
    ClassLevel = 8,
    SubclassLevel = 16
}
Run Code Online (Sandbox Code Playgroud)

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

既然NodeLevel newLevel = currentLevel - 1;不起作用,有没有人建议如何实现这一目标?我想这是荒谬的简单但我的大脑此刻不会想到它.

我正在使用.NET 2.0.

Jon*_*eet 5

假设你只有一个标志,你可以用适当的投射除以2:

NodeLevel newLevel = (NodeLevel) ((int)currentLevel / 2);
Run Code Online (Sandbox Code Playgroud)

(有趣的是,你可以在没有任何投射的情况下进行加法和减法......但是乘法,除法,移位等都需要两种投射方式.)


Shi*_*dim 5

您也可以使用右移操作员.

NodeLevel newLevel = (NodeLevel) ((int)currentLevel >> 1)
Run Code Online (Sandbox Code Playgroud)