Есть готовые 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
и не выводит в консоль
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как в C# WPF Prism занять один регион другим? Пример на Word'e:
Нужно объявить две матрицы: 1х3 и 3х2 с конкретными значениями, а затем перемножить эти две матрицы
Часто нахожу в коде вызовы GCCollect(), например при работе с графиков через GDI+