C# c“递归-”;收集被修改;枚举操作不能执行";
我正试图使用递归来提升层次结构,但我得到了以下错误:C# c“递归-”;收集被修改;枚举操作不能执行";,c#,recursion,ienumerable,C#,Recursion,Ienumerable,我正试图使用递归来提升层次结构,但我得到了以下错误: Collection was modified; enumeration operation may not execute. 我在这里的假设是,当它每次进入函数时,它使用的是相同的parentRolesCopy,而不是不同的parentRolesCopy,因此当它在第二次进入时,它将parentRolesCopy更改为与原始函数调用不同 我怎样才能避开这件事 private IEnumerable<string> GetAll
Collection was modified; enumeration operation may not execute.
我在这里的假设是,当它每次进入函数时,它使用的是相同的parentRolesCopy,而不是不同的parentRolesCopy,因此当它在第二次进入时,它将parentRolesCopy更改为与原始函数调用不同
我怎样才能避开这件事
private IEnumerable<string> GetAllParentRoles(string role)
{
// GET EACH PARENT ROLE
var parentroles = //code that gets any parents of the role passed in
//RECURSIVELY CALL THIS FUNCTION TO KEEP GETTING PARENTS OF PARENT ROLES UNTIL NONE LEFT
var parentRolesCopy = parentroles;
foreach (var parentrole in parentRolesCopy)
{
parentroles.AddRange(GetAllParentRoles(parentrole));
}
return parentroles;
}
private IEnumerable GetAllParentRoles(字符串角色)
{
//获取每个父角色
var parentroles=//获取传入角色的任何父级的代码
//递归调用此函数以继续获取父角色的父角色,直到没有父角色
var parentRolesCopy=parentroles;
foreach(parentRolesCopy中的var parentrole)
{
AddRange(GetAllParentRoles(parentrole));
}
返回父角色;
}
您可以使用列表
或其他集合
var parentRolesCopy = new List<string>(parentroles);
var parentRolesCopy=新列表(parentroles);
您可以使副本实际上是副本,而不只是指向同一引用。一种方法是:
var parentRolesCopy = parentroles.ToArray();
你只是在复制引用。它们都指向同一个实际收藏。啊,谢谢!我没有意识到我所做的只是参考了原文。