如何从bool值获取IEnumerable枚举?

问题描述 投票:0回答:1

我有下面的代码片段。我希望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?
}
c# generics enums ienumerable
1个回答
1
投票

您可以使用收益率回报:

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;
}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.