Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c“递归-”;收集被修改;枚举操作不能执行";_C#_Recursion_Ienumerable - Fatal编程技术网

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

你只是在复制引用。它们都指向同一个实际收藏。啊,谢谢!我没有意识到我所做的只是参考了原文。