如何获取特定名称的枚举值?

时间:2009-08-24 19:47:17

标签: asp.net asp.net-mvc enums

基本上我正在编写自己的'RoleProvider'和'AuthorizeAttribute'版本。我有一个Enum(作为一个位字段),列出了所有可能的角色:

namespace myProject.Global
{
    [Flags]
    enum Roles
    {
        Viewer = 1,
        User = 2,
        Admin = 4,
        Superadmin = 8
    }
}

我的AuthorizeAttribute与现有的工作方式类似。在我的逻辑中,我遍历每个“授权”角色并检查用户是否属于它。 _rolesSplit 是AuthorizeAttribute中为特定操作提供的角色数组。 httpContext.Session [“Roles”] 是一个表示用户角色的整数。

 foreach (string roleName in _rolesSplit)
{
    if ((httpContext.Session["Roles"] & myProject.Global.Roles[roleName]) == myProject.Global.Roles[roleName]) return true;
}

return false;

这是我无法工作的部分: APICText.Global.Roles [roleName] 。我是.NET开发的新手,所以我不确定如何使这项工作。我基本上需要传递角色名称并获取相关值。我该怎么做?

1 个答案:

答案 0 :(得分:3)

您需要的是Enum.Parse

尝试这样的事情......

foreach (string roleName in _rolesSplit)
{
    if (httpContext.Session["Roles"] & (Roles)Enum.Parse(typeof(Roles), roleName) == (Roles)Enum.Parse(typeof(Roles), roleName)) return true;
}

或者这......

foreach (string roleName in _rolesSplit)
{
    Roles role = (Roles)Enum.Parse(typeof(Roles), roleName);
    if (httpContext.Session["Roles"] & role == role) return true;
}