C#如何得到大于给定值的所有枚举值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我有以下列举的成员角色:

public enum RoleName
{
    RegisteredUser,
    Moderator,
    Administrator,
    Owner
}

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

例如我输入管理员,我得到一个IEnumerable RoleName.AdministrationRoleName.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);
    }
}
提问于
用户回答回答于

你可以使用以下助手方法为给定角色提供一组允许的角色:

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

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

用户回答回答于

可能取决于.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();
    }
}

扫码关注云+社区