如何从布尔值中获取 IEnumerable 枚举?

How to get IEnumerable enum from bool values?

我有以下代码片段。我想要 GetPermissions 方法,这样我只会获得那些具有 item.Actions.XXXX.value =true

的枚举

早些时候我使用的是字典,所以我评论过的代码是有效的

public class ResourcePermissionModel
    {
        public ResourcePermissionModel();
        public int ResourceId { get; set; }
        public IEnumerable<Permission> Permissions { get; set; }
    }

 public enum Permission
    {
        View = 0,
        Modify = 1,
        Delete = 2,
        Assign = 3
    }

var resourcePerm= result.RoleAccess.Permissions
    .Select(item => new ResourcePermissionModel()
    {
        ResourceId = Convert.ToInt32(item.Id),
        Permissions = GetPermissions(item.Actions)
        //Permissions = new Dictionary<LockboxService.Models.Enum.Permission, bool>
        //{
        //    { LockboxService.Models.Enum.Permission.Assign, item.Actions.Assign.Value },
        //    { LockboxService.Models.Enum.Permission.Delete, item.Actions.Delete.Value },
        //    { LockboxService.Models.Enum.Permission.Modify, item.Actions.Modify.Value },
        //    { LockboxService.Models.Enum.Permission.View, item.Actions.Use.Value }
        //}
    }).ToList();
private IEnumerable<Permission> GetPermissions(ResourceActionsBase actions)
{
//what to enter here?
}

你可以使用 yield return:

private IEnumerable<Permission> GetPermissions(ResourceActionsBase actions)
{
    if (actions.Use.Value)
        yield return Permission.View;
    if (actions.Modify.Value)
        yield return Permission.Modify;
    if (actions.Delete.Value)
        yield return Permission.Delete;
    if (actions.Assign.Value)
        yield return Permission.Assign;
}

您可能希望在调用 GetPermissions 之后添加 ToList(),否则每次您从 ResourcePermissionModel 获得 Permissions 时它都会延迟执行。

另外请注意,如果您添加更多权限,我认为这种方法的扩展性很差。在这种情况下,如果您可以实际更改模型或使用从模型属性到权限值的静态映射,这可能会很有用