我有以下成员角色列举:
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)
然后将所有这些分配给用户.
为了更好地定义哪个角色比另一个更大,您需要为角色分配数值,如下所示:
public enum RoleName
{
RegisteredUser = 2,
Moderator = 4,
Administrator = 8,
Owner = 16
}
Run Code Online (Sandbox Code Playgroud)
现在,如果将任何类型为RoleName的实例强制转换为(int),您将获得数值,因此您可以将它们相互比较.
注意:
1.这里我使用2的幂作为值,以允许使用逐位运算符组合RoleNames.