位串的枚举列表

List of enums to bit string

我已经创建了一个控制访问的权限枚举标志:

[Flags]
public enum PermissionEnum
{
    None = 0,
    Read = 1,
    Write = 2,
    Delete = 4,
    All = 7
}

如果有人请求访问,不同的枚举值将被添加到列表中:

List<PermissionEnum> permissions = new List<PermissionEnum> { 1, 4 }

如何将枚举列表展平为位字符串? 例如。

[1,4] = "101"

步骤 1

将您的标志列表合并为一个枚举值:

PermissionEnum combined = permissions.Aggregate(PermissionEnum.None,
                                                (cmb, perm) => cmb | perm);

步骤 2

将组合值转换为位串:

string bitString = Convert.ToString((int)combined, 2);

请注意,如果您可以更改界面以便您只获取组合枚举而不是列表,则可以完全避免第 1 步。

你做错了。您应该存储在单个 PermissionEnum 变量中,而不是列表,并且对于要添加的每个权限,执行按位或:

PermissionEnum pe = PermissionEnum.None; //Current value:0

pe |= PermissionEnum.Read;  //Add Read permission. Current value: 1
pe |= PermissionEnum.Delete;//Add Delete permission. Current value: 5

然后你可以显示将int转换为字符串的值:

string result = Convert.ToString((int)pe, 2); //yields "101"

要删除权限,请使用按位 and 和按位 not

pe &= ~PermissionEnum.Read; //Removes Read permission. Current value: 4

此外,要检查是否设置了某些权限,请使用按位 and 并检查是否大于 0:

bool canRead = (pe & PermissionEnum.Read) > 0;