2

再帰を使用して階層を上に行こうとしていますが、次のエラーが発生します。

Collection was modified; enumeration operation may not execute.

ここでの私の仮定は、毎回関数に入るときは同じparentRolesCopyを使用しており、異なるものではないため、2回目に入るときは、元の関数呼び出しで異なる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

同じ参照を指すだけでなく、実際にコピーをコピーにすることができます。1つの方法は次のとおりです。

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

Listまたは他のコレクションを使用できます

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