c#获取大于给定值的所有枚举值?

bev*_*qua 20 c# enums

我有以下成员角色列举:

public enum RoleName
{
    RegisteredUser,
    Moderator,
    Administrator,
    Owner
}
Run Code Online (Sandbox Code Playgroud)

我希望能够获取大于或等于给定角色的所有角色.

例如,我输入管理员,我用RoleName.Administration和获得IEnumerableRoleName.Owner

这种东西:

public static void AddUserToRole(string username, RoleName level)
{
    var roles = Enum.GetValues(typeof(RoleName)).Cast<R>().ToList().Where(role => level > role);

    foreach (var role in roles)
    {
        Roles.AddUserToRole(username, role);
    }
}
Run Code Online (Sandbox Code Playgroud)

Bit*_*lue 18

可能取决于.NET的版本.但这对我很有用:

无需转换或使用特殊技巧.只需与通常的运营商进行比较:

enum Test { a1, a2, a3, a4 }

class Program
{
    static void Main(string[] args)
    {
        Test a = Test.a2;

        Console.WriteLine((a > Test.a1));
        Console.WriteLine((a > Test.a2));
        Console.WriteLine((a > Test.a3));
        Console.WriteLine((a > Test.a4));

        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)


nak*_*hli 15

您可以使用以下帮助程序方法为您提供给定角色允许的一组角色:

    private IEnumerable<RoleName> AllAllowedRoles(RoleName level)
    {
        return Enum.GetValues(typeof(RoleName)).Cast<RoleName>().Where(role => level >= role);
    } 
Run Code Online (Sandbox Code Playgroud)

然后将所有这些分配给用户.


Mo *_*our 7

为了更好地定义哪个角色比另一个更大,您需要为角色分配数值,如下所示:

public enum RoleName
{
    RegisteredUser = 2,
    Moderator = 4,
    Administrator = 8,
    Owner = 16
}
Run Code Online (Sandbox Code Playgroud)

现在,如果将任何类型为RoleName的实例强制转换为(int),您将获得数值,因此您可以将它们相互比较.

注意:
1.这里我使用2的幂作为值,以允许使用逐位运算符组合RoleNames.

  • 错误; 您不需要分配任何值. (3认同)