0

我有一个这样声明的枚举

[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 的任意组合。我希望找到的最高级别基本上是创建 + 编辑 + 视图。如果失败,编辑+查看,最后查看

4

2 回答 2

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)

如果该订购符合您的要求,那么您的代码是正确的。

于 2012-11-29T05:36:47.080 回答
0

我不确定是否有任何从八进制到整数的直接转换函数。

您可以创建一个函数,它在我们传递枚举值时返回 int 值。例如, GetIntValue(PermissionEnum.None) 这将返回 0;

所以你可以编写如下的排序逻辑:

SecurityRolePermissionView HighestPermission = AvailablePermissions.OrderByDescending(o => GetIntValue(o.Permission)).FirstOrDefault();
于 2012-11-29T05:21:55.913 回答