准备枚举列表并从List中查找枚举值

本文关键字:枚举 enum 查找 List 列表 | 更新日期: 2023-09-27 18:14:31

我决定写下面的代码访问控制列表权限检查。

我的数据库将返回像EmployeeDetFeature, Create, Edit这样的记录

我想解析Create并将其添加到一个功能ACL枚举列表。

我也需要以后找到它。

public enum ACL
{
    Create,
    Delete,
    Edit,
    Update,
    Execute
}  

public class Feature
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<ACL> ACLItems { get; set; }
}


public static class PermissionHelper
{
    public static bool CheckPermission(Role role, string featureName, ACL acl)
    {
        Feature feature = role.Features.Find(f =>f.Name == featureName);
        if (feature != null)
        {
            //Find the acl from enum and if exists return true
            return true;
        }
        return false;
    }
}

我如何使它与Enum集合准备,并找到相同的以后检查权限

准备枚举列表并从List<enum>中查找枚举值

从枚举中查找acl,如果存在则返回true

像这样?

bool b= Enum.GetValues(typeof(ACL)).Cast<ACL>().Any(e => e == acl);

如果你在。net 4.0上工作,你可以用Flags属性装饰ACL enum并稍微改变你的模型:

// Added Flags attribute.
[Flags]
public enum ACL
{
    None = 0,
    Create = 1,
    Delete = 2,
    Edit = 4,
    Update = 8,
    Execute = 16
}
public class Feature
{
    public int Id { get; set; }
    public string Name { get; set; }
    // ACLItems is not List anymore.
    public ACL ACLItems { get; set; }
}

现在可以使用Enum了。TryParse,如下例所示:

static void Main(string[] args)
{
    ACL aclItems = ACL.Create | ACL.Edit | ACL.Execute;
    var aclItemsString = aclItems.ToString();
    // aclItemsString value is "Create, Edit, Execute"
    ACL aclItemsOut;
    if (Enum.TryParse(aclItemsString, out aclItemsOut))
    {
        var areEqual = aclItems == aclItemsOut;
    }
}