2

我正在尝试使用递归来提升层次结构,但出现此错误:

Collection was modified; enumeration operation may not execute.

我在这里的假设是,当它每次进入函数时,它使用的是相同的 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;
    }
4

2 回答 2

4

您可以使副本实际上是副本,而不仅仅是指向相同的引用。一种方法是:

var parentRolesCopy = parentroles.ToArray();
于 2012-08-29T17:07:40.020 回答
2

您可以使用List或其他一些集合

var parentRolesCopy = new List<string>(parentroles);
于 2012-08-29T17:07:17.100 回答