Есть готовые enum-ы
[Flags]
public enum UserFlags {
guest = 0, // GUEST USER //
normal = 1, // NORMAL USER (DEFAULT) //
banned = 2, // USER IS BLOCKED //
online = 4 // USER IS ONLINE //
}
Вот так устанавливаю флаги:
user.Flags = UserData.UserFlags.normal;
user.SetFlag(UserData.UserFlags.guest);
user.SetFlag(UserData.UserFlags.online);
public UserFlags Flags {
get;
internal set;
}
public void SetFlag(UserFlags flag, bool state = true) {
Flags = state ? Flags |= flag : Flags &= ~flag;
}
Но если я пробую вывести Flags как тест в консоль от возвращает только Online и Normal а вот guest не учитывается.Почему?
Проблема в том, что флагом guest вы пытаетесь оперировать с несуществующим 0-вым битом.
Решение достаточно простое - начинать с 1-го бита:
[Flags]
public enum UserFlags {
guest = 1, // GUEST USER //
normal = 2, // NORMAL USER (DEFAULT) //
banned = 4, // USER IS BLOCKED //
online = 8 // USER IS ONLINE //
}
другой вариант - использовать битовый сдвиг, чтобы не путаться в значениях когда флагов достаточно много и они становятся достаточно крупными числами:
[Flags]
public enum UserFlags {
guest = 1 << 0, // GUEST USER //
normal = 1 << 1, // NORMAL USER (DEFAULT) //
banned = 1 << 2, // USER IS BLOCKED //
online = 1 << 3 // USER IS ONLINE //
}
ToString() не обрабатывает enum со значением 0 и не выводит в консоль
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости