拆分一个字符串,并使用每个项目将其分配给另一个列表

本文关键字:项目 列表 另一个 分配 一个 字符串 拆分 | 更新日期: 2023-09-27 17:58:51

我有一个要分配给用户的角色列表:

var role1 = new Role { ApplicationName = "XXX", RoleName = "ROLE1" };
var role2 = new Role { ApplicationName = "XXX", RoleName = "ROLE2" };
var role3 = new Role { ApplicationName = "XXX", RoleName = "ROLE3" };
List<Role> listRoles = new List<Role>
{
    role1,
    role2,
    role3
};

我可以分配这样一个特定的角色:

var userRoles = new List<Role> 
{
    listRoles.First(x => x.RoleName == "ROLE1")
}

假设我有一个字符串,其中列出了要添加到我的用户中的角色

string listRoles = "ROLE1;ROLE3";

我的问题是:如何为我的用户分配角色列表?

我尝试:

var userRoles = new List<Role> 
{
    foreach(var role in listRoles.Split(";")
    {
        listRoles.First(x => x.RoleName == role);
    }
}

我有编译错误。

拆分一个字符串,并使用每个项目将其分配给另一个列表

您有编译错误,因为字符串和原始角色列表都使用了相同的变量名listRoles

var rolesToAssign = "ROLE1;ROLE3";
var matchingRoles = rolesToAssign.Split(';');
var userRoles = listRoles.Where(x => matchingRoles.Contains(x.RoleName))
                         .ToList();

您正试图在集合初始值设定项中使用foreach循环,但不能这样做。相反,您可以执行以下操作:

var userRoles = new List<Roles>();
foreach(var role in listRoles.Split(";"))
{
   userRoles.Add(listRoles.First(x => x.RoleName == role))
}