如何在枚举和 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
我有一个名为 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