Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 准备枚举列表并从列表中查找枚举值<;enum>;_C#_Asp.net_.net_Enums - Fatal编程技术网

C# 准备枚举列表并从列表中查找枚举值<;enum>;

C# 准备枚举列表并从列表中查找枚举值<;enum>;,c#,asp.net,.net,enums,C#,Asp.net,.net,Enums,我决定为访问控制列表权限检查编写以下代码 我的数据库将返回一条记录,如employeedeetfeature,Create,Edit 我想解析创建并将其添加到功能ACL枚举列表中 我以后还要找 public enum ACL { Create, Delete, Edit, Update, Execute } public class Feature { public int Id { get; set; } public stri

我决定为访问控制列表权限检查编写以下代码

我的数据库将返回一条记录,如
employeedeetfeature
Create
Edit

我想解析
创建
并将其添加到功能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;
    }
}
公共枚举ACL
{
创造,,
删除,
编辑
更新,
执行
}  
公共类功能
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表项目{get;set;}
}
公共静态类PermissionHelper
{
公共静态bool CheckPermission(角色角色、字符串特征名称、ACL ACL)
{
Feature=role.Features.Find(f=>f.Name==featureName);
如果(功能!=null)
{
//从枚举中查找acl,如果存在,则返回true
返回true;
}
返回false;
}
}
如何准备枚举集合,并在以后检查权限时找到相同的集合

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

像这样的

bool b= Enum.GetValues(typeof(ACL)).Cast<ACL>().Any(e => e == acl);
bool b=Enum.GetValues(typeof(ACL)).Cast().Any(e=>e==ACL);
从枚举中查找acl,如果存在,则返回true

像这样的

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

如果您正在使用.NET 4.0,您可以使用属性修饰ACL枚举,并稍微更改您的模型:

// 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; }
}
现在您可以使用,如以下示例中所示:

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;
    }
}

如果您正在使用.NET 4.0,则可以使用属性修饰ACL枚举,并稍微更改模型:

// 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; }
}
现在您可以使用,如以下示例中所示:

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;
    }
}

+1看起来不错。让我试试。此外,我还需要了解如何将每个字符串(如
Create
Edit
)分配给功能中的ACLItems:(+1:sweet。希望您可以添加代码,演示如何通过扩展方法访问此功能。+1看起来不错。让我试试。我还需要了解如何将每个字符串(如
Create
Edit
)分配到功能中的ACLItems:(+1:sweet。希望您可以添加代码,演示如何通过扩展方法访问此文件,尽管.net frameworkYes的早期版本中也启用了.Flags,但在.net frameworkYes的早期版本中未启用Enum.TryParse方法()。在.net frameworkYes的早期版本中也启用了标志,但Enum.TryParse方法()未启用。