Using Bitwise operators on flags

后端 未结 9 1916
生来不讨喜
生来不讨喜 2020-12-23 12:11

I have four flags

Current = 0x1  
Past = 0x2  
Future = 0x4  
All = 0x7

Say I receive the two flags Past and Future (setFlags(PAST

9条回答
  •  借酒劲吻你
    2020-12-23 12:46

    An addendum to Marc Gravell and Vilx-'s answer:

    Your flagged enum shouldn't specify the amount for "All", it should just include your existing values. This goes for any calculated values.

    [Flags]
    public enum Time
    {
        None = 0,
        Current = 1,
        Past = 2,
        Future = 4,
        All = Current | Past | Future
    }
    

    Note that Vilx- removed the use of Hexadecimal for values. This is important because once you're past 0x8, your values will have to comply with Hex. You should just stay in decimal.

    EDIT: I also want to add that you can use bit shifting rather than hex/decimal.

    This looks like:

    [Flags]
    public enum Time
    {
        None = 0,
        Current = 1,
        Past = 1 << 1, // 2, 10 binary
        Future = 1 << 2, // 4, 100 binary
        All = Current | Past | Future
    }
    

提交回复
热议问题