好吧用标志为枚举添加2个非幂2值?

时间:2016-08-27 07:11:56

标签: c# enums bitflags

在我的下面的枚举中,我的目的是能够使用Scheduled来表示' ILT | VILT | HVILT&#39 ;.在制作这种枚举的指南中,每个人都建议使用2的幂,显然,如果我实际上将Scheduled表示为其他值的组合,那么这应该可以正常工作,对吗?

或者在做这件事时我应该注意哪些问题?

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

1 个答案:

答案 0 :(得分:2)

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

在可读性方面,您可能会考虑两个更改。

首先,我发现Scheduled = 7无法读取。在这种情况下,它包含ILTVILTHVILT标志非常简单。但是有一天你可能会遇到需要使用更复杂的标志,而173这样的数字并不容易立即分解。正确的方法是使用Scheduled = ILT | VILT | HVILT

其次,我不喜欢输入两种明确的权力。 Bitshift运算符为您提供了对所有枚举值使用统一表示法的机会。

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

[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
}