gpt4 book ai didi

c# - 如何检查枚举数组中是否存在枚举值?

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:02 27 4
gpt4 key购买 nike

我有这个代码来授权用户:

public enum Role {
Admin,
User
}

public class AuthorizeRolesAttribute : AuthorizeAttribute
{
private Role[] _roles;
public AuthorizeRolesAttribute(params Role[] roles)
{
_roles = roles;
}

protected override bool IsAuthorized(HttpActionContext actionContext)
{
ClaimsIdentity claimsIdentity;
var httpContext = HttpContext.Current;
if (!(httpContext.User.Identity is ClaimsIdentity))
{
return false;
}

claimsIdentity = httpContext.User.Identity as ClaimsIdentity;
var roleId = claimsIdentity.FindFirst("RoleId");

if (_roles == null)
{
// just extra defense, not sure it should happen
return false;
}

// This line fails
return _roles.Contains(roleId);
}
}

它检查以下内容:

[AuthorizeRoles(Role.Admin, Role.User)]

但是我越来越困惑了。 _roles 包含 Role 类型的数组。 roleId 是代表角色的数字。

我的 contains 行失败并显示此消息:

Error   2   'Entities.Enums.Role[]' does not contain a definition for 'Contains' 
and the best extension method overload 'System.Linq.Queryable.Contains<TSource>
(System.Linq.IQueryable<TSource>, TSource)' has some invalid arguments

我怎样才能将 roleId 转换为一种类型的 Role,以便 contains 起作用?

最佳答案

contains 方法需要一个枚举值

如果你的 roldeId 是一个整数。

你可以使用

 _roles.Contains((Role)roleId);

如果它是一个字符串,您需要使用 Enum.ParseEnum.IsDefined 方法。

这是一个小片段:

class Program
{
static void Main(string[] args)
{
Role[] _roles;
_roles = new[] {Role.Admin, Role.User};

Console.WriteLine( _roles.Contains((Role)0)); // True
Console.WriteLine(_roles.Contains((Role)1)); // True
Console.WriteLine(_roles.Contains((Role)2)); // False

Role role = (Role)Enum.Parse(typeof (Role), "Admin");
Console.WriteLine(_roles.Contains(role)); // True
}

public enum Role
{
Admin,
User,
Guest
}
}

希望对你有帮助

关于c# - 如何检查枚举数组中是否存在枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27471678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com