我有一个枚举声明
[Flags]
public enum PermissionEnum
{
[EnumStringValue("None")]
None = 0x0,
[EnumStringValue("Create")]
Create = 0x1,
[EnumStringValue("Edit")]
Edit = 0x2,
[EnumStringValue("View")]
View = 0x4
}
我随后有一些试图获得最高权限的linq。
List<SecurityRolePermissionView> AvailablePermissions = GetPermissions();
SecurityRolePermissionView HighestPermission = AvailablePermissions.OrderByDescending(o => o.Permission).FirstOrDefault();
使用当前的枚举值,这似乎符合它的建议。但是,我非常有信心这段代码不正确,但我不确定我能解释为什么或如何实现正确的实现。
无论哪种方式,有人可以请他们确认这是否实际上是错误的(以及为什么)并提供如何实现我想要的结果的解释?
编辑:我可能不太清楚解释我的最高许可是什么。这是一个标志枚举。因此,它可以包含None,Create,Edit,View的任意组合。我期待找到的最高点基本上是Create + Edit + View。如果失败,请编辑+查看,最后查看
答案 0 :(得分:4)
枚举排序与枚举基础类型的排序相同(C#规范部分7.9.5,“枚举运算符”)。因此,这是您可能的枚举值的顺序:
View | Edit | Create ( = 7)
View | Edit ( = 6)
View | Create ( = 5)
View ( = 4)
Edit | Create ( = 3)
Edit ( = 2)
Create ( = 1)
None ( = 0)
如果该顺序符合您的要求,那么您的代码是正确的。
答案 1 :(得分:0)
我不确定是否有从八进制到int的任何直接转换函数。
当我们传递Enumeration值时,您可以创建一个返回int值的函数。
例如,
GetIntValue(PermissionEnum.None)
这将返回0;
所以你可以按如下方式编写排序逻辑:
SecurityRolePermissionView HighestPermission = AvailablePermissions.OrderByDescending(o => GetIntValue(o.Permission)).FirstOrDefault();