繁体   English   中英

如何从标志类型的枚举中“减去1”?

[英]How to “subtract 1” from a flags-type enum?

我有一个这样定义的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。

假设只有一个标志,则可以通过适当的强制转换将其除以2:

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

(有趣的是,您可以在不进行任何强制转换的情况下进行加法和减法,但是乘法,除法,移位等都需要双向转换。)

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

NodeLevel newLevel = (NodeLevel) ((int)currentLevel >> 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM