簡體   English   中英

如何從布爾值獲取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?
}

您可以使用收益回報:

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 ,它都會被延遲執行。

還請注意,如果您添加更多權限,我認為這種方法的伸縮性很差。 在這種情況下,如果您可以實際更改模型或使用從模型屬性到Permission-Values的靜態映射,則可能會很有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM