Как получить IEnumerable enum из значений bool? - PullRequest
0 голосов
/ 17 марта 2019

У меня есть фрагмент кода ниже. Я хотел метод 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?
}

1 Ответ

1 голос
/ 17 марта 2019

Вы можете использовать возврат доходности:

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.

Также обратите внимание, что я думаю, что этот подход плохо масштабируется, если вы добавите больше разрешений. В этом случае может быть полезно, если вы действительно можете изменить модель или использовать статическое отображение из свойств модели в Permission-Values ​​

...