Thursday, April 19, 2018

Flags


      [Flags]
        public enum SettingFlags : long
        {
            /// <summary>
            /// hidden in config tool for normal users
            /// </summary>
            myflag = 0b1,
            AdvancedSetting = 0b10
        }

       [NotMapped]
        public bool AdvancedSetting
        {
            get => Flags.HasFlag(SettingFlags.AdvancedSetting);
            set => Flags=SetFlag(Flags, value, SettingFlags.AdvancedSetting);
        }

        public static SettingFlags SetFlag(SettingFlags flags, bool value, SettingFlags flag)
        {
            if (value)
                flags |= flag;
            else
                flags &= flag;
            return flags;
        }





oldschool:
        private bool GetBit(SettingFlags position)
        {
            var pos = (byte)position;
            var mask = (1 << pos);
            var bit = Flags & mask;
            return 0<bit ;
        }

        private void SetBit(bool value, SettingFlags position)
        {
            var pos = (byte) position;
            var mask = (1 << pos);
            if (value)
                Flags |= mask;
            else
                Flags &= ~mask;
        }

No comments: