将非2次幂的值添加到带标志的枚举中

本文关键字:标志 枚举 添加 2次 将非 | 更新日期: 2023-09-27 18:04:21

在下面的枚举中,我的意图是能够使用Scheduled来表示'ILT | VILT | HVILT'。显然,在制作这种枚举的指导方针中,每个人都建议使用2的幂,但如果我实际上是指Scheduled是这些其他值的组合,那么这应该没问题,对吧?

或者在做这个的时候有什么我应该注意的问题吗?

[Flags]
public enum Modalities
{
    None = 0,
    ILT = 1,
    VILT = 2,
    HVILT = 4,
    Scheduled = 7,
    Online = 8,
    Package = 16,
    All = ~None
}

将非2次幂的值添加到带标志的枚举中

就功能而言,没什么可担心的。

说到可读性,你可以考虑两种改变。

首先,我没有发现Scheduled = 7可读。在这种情况下,很简单,它包括ILT, VILTHVILT标志。但有一天你可能会遇到需要使用更复杂的标志和数字,如173不是那么容易分解直接。正确的方法是使用Scheduled = ILT | VILT | HVILT

其次,我不喜欢键入两个显式的幂。位移操作符使您有机会对所有枚举值使用统一的表示法。

这是一个我自己的想法的例子。

[Flags]
public enum Modalities
{
    None = 0,
    ILT = 1 << 0,
    VILT = 1 << 1,
    HVILT = 1 << 2,
    Online = 1 << 3,
    Package = 1 << 4,
    Scheduled = ILT | VILT | HVILT,
    All = ~None
}