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

时间:2013-02-12 10:09:33

标签: c#

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

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);
    }
}

我收到编译错误。

2 个答案:

答案 0 :(得分:1)

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

var rolesToAssign = "ROLE1;ROLE3";
var matchingRoles = rolesToAssign.Split(';');

var userRoles = listRoles.Where(x => matchingRoles.Contains(x.RoleName))
                         .ToList();

答案 1 :(得分:0)

你试图在collection initializer内使用foreach循环,你不能这样做。相反,您可以执行以下操作:

var userRoles = new List<Roles>();

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