[英]How to Flatten a Collection of Objects with Flag Enum Properties?
我有一个Role
对象,它将具有几个flag枚举属性,每个相关对象一个。 一个用户可以属于多个角色。 我想获取角色集合并将其展平为单个表示形式,并使用它来限制UI功能。 如何展平藏品?
这是我的LINQPad测试中的一些示例代码:
ICollection<Role> roles = new List<Role>();
roles.Add(new Role {
Name = "Administrator",
Object1Defaults = DefaultPermissions.Add | DefaultPermissions.Edit | DefaultPermissions.Remove,
Object2Defaults = DefaultPermissions.Add | DefaultPermissions.Edit | DefaultPermissions.Remove
});
roles.Add(new Role {
Name = "Manager",
Object1Defaults = DefaultPermissions.Add | DefaultPermissions.Edit,
Object2Defaults = DefaultPermissions.Add | DefaultPermissions.Edit
});
public class Role {
public string Name { get; set; }
public DefaultPermissions Object1Defaults { get; set; }
public DefaultPermissions Object2Defaults { get; set; }
}
[Flags]
public enum DefaultPermissions {
Add = 1 << 0,
Edit = 1 << 1,
Remove = 1 << 2
}
当然,我也乐于接受有关实现权限的更好方法的建议。 我的计划是在Role
中的数据库中为每个其他对象提供一个枚举,就像使用Object1Defaults
和Object2Defaults
一样,在每个视图中都使用一个枚举,除了使用更好的名称以及更多名称。
首先,我建议不要将枚举用作标志。 它限制了您可以拥有的总数,这现在可能不是问题,但是如果您日后用完一点点将是一个大问题。 因此,使您的权限容器成为一个集合。
一旦这样做,就可以使用linq将结果展平为一个数组(或List或任何您想要的东西):
var result = roles.SelectMany(x => Object1Defaults).Distinct().ToArray();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.