var profile = new UserInfo {NetUser = netUser, Flags = UserInfo.FlagList.Normal};
profile.SetFlag(UserInfo.FlagList.Online);
public void SetFlag(FlagList flag, bool state = true) { Flags = (state) ? Flags |= flag : Flags &= ~flag; }
Как мне перечисленные Enum-ы вывести как текст (Enum-ы в данном случае FlagList )?
Если через profile.Flags.ToString() то он возращает только последний - Online
public class UserInfo
{
[Flags]
public enum FlagList
{
Normal,
Online,
}
public FlagList Flags;
public void SetFlag(FlagList flag, bool state = true) { Flags = (state) ? Flags |= flag : Flags &= ~flag; }
public bool HasFlag(FlagList flag) { return (Flags & flag) == flag; }
public void ToggleFlag(FlagList flag) { Flags ^= flag; }
}
Проблема заключается в том, что по умолчанию значение для Normal - 0.
То есть, ты не можешь определить установлен этот флаг или нет. Поэтому кажется что ты установил только второй, которому присвоено следующее значение 1.
При работе с флагами лучше явно задавать каждое значение:
[Flags]
public enum FlagList
{
Normal = 1,
Online = 1<<1,
// и т.д.
}
В этом случае сработает переопределенный ToString
и после кода в вопросе выведется Normal, Online
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Где то давно слышал, что в php безопаснее хранить логин и пароль от базы данных в переменных окружения ($_ENV), а не в самом php скриптеДействительно...