Как я могу использовать побитовое ИЛИ для перечисления и int? - PullRequest
1 голос
/ 23 мая 2019

У меня есть флаг Enum с именем Role и метод расширения с именем AddRole, который принимает перечисление Role и int, который работает как флаг и содержит только единицы и нули, где каждый 1 представляет роль, котораяу человека есть.Я хочу, чтобы метод добавил роль в int, так что AddRole(Role.Grandmother, 1000) возвращает, например, 1100 .

[Flags]
public enum Role
    {
        Mother = 1,
        Daughter = 2,
        Grandmother = 4,
        Sister = 8,

    }

Я пытался сделать это:

public static int AddRole(this Role newRole, int currentRoles)
        {
            return (int)((Role)currentRoles | newRole);
        }

, но это просто возвращает 1004. Кто-нибудь знает правильный способ сделать это?(У меня нет способа избежать представления int в «двоичном ish», так как это способ хранения сущности в (очень старой и неприкасаемой) базе данных)

1 Ответ

3 голосов
/ 23 мая 2019

Таким образом, реальная проблема заключается в том, как интерпретировать десятичное значение (например, 1000) как двоичное представление.

Вы можете сделать это, преобразовав его в строку, а затем разрешив перегрузке Convert.ToInt32 () , которая принимает аргумент base , снова проанализировать его как двоичное значение:

int i = 1000;
int b = Convert.ToInt32(i.ToString(), 2); // interprete the string as a binary value
// b = 8
...