如何从布尔值中获取 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
时它都会延迟执行。
另外请注意,如果您添加更多权限,我认为这种方法的扩展性很差。在这种情况下,如果您可以实际更改模型或使用从模型属性到权限值的静态映射,这可能会很有用
我有以下代码片段。我想要 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
时它都会延迟执行。
另外请注意,如果您添加更多权限,我认为这种方法的扩展性很差。在这种情况下,如果您可以实际更改模型或使用从模型属性到权限值的静态映射,这可能会很有用