如何在枚举和 int 上使用按位或?

How can I use bitwise OR on an enum and an int?

我有一个名为 Role 的标志 Enum 和一个名为 AddRole 的扩展方法,它采用 Role 枚举和一个像标志一样工作且仅包含 1 和 0 的 int ,其中每个 1 代表一个人拥有的角色。我希望该方法将角色添加到 int,例如 AddRole(Role.Grandmother, 1000) returns 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);
        }

但这只是 returns 1004。有人知道正确的方法吗? (我无法避免 "binary ish" int 表示,因为这是实体存储在(非常古老且不可触摸的)数据库中的方式)

所以您遇到的实际问题是如何将十进制值(如 1000)解释为二进制表示形式。

您可以通过将其转换为字符串然后让 Convert.ToInt32() 重载采用 base 参数再次将其解析为二进制值来实现:

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