0

在下面的枚举中,我的意图是能够用来Scheduled表示'ILT | 维尔特 | HVILT'。在制作这种枚举的指导方针中,显然每个人都建议使用 2 的幂,但如果我真的Scheduled想成为其他值的组合,那么这应该可以正常工作,对吧?

或者在这样做时我应该注意什么问题?

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

1 回答 1

3

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

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

首先,我觉得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
}
于 2016-08-27T07:49:07.997 回答