2

我有以下方法: -

public void AssignGroupRole(int id, int[] selectedGroups, int[] currentGroups)
        {
            var roleGroups = FindRole(id).Groups;
            var roleGroupsCopy = roleGroups;
            var securityRole = FindRole(id);
            foreach (var group in roleGroupsCopy)
            {
                if (currentGroups != null)
                {
                    for (int c = 0; c < currentGroups.Count(); c++)
                    {
                        if (group.GroupID == currentGroups[c])
                        {

                            securityRole.Groups.Remove(group);
                        }
                    }
                }
            }

但我收到一个错误“集合已修改;枚举操作可能无法执行。” 上

foreach (var group in roleGroupsCopy)

关于如何克服这个错误的任何建议?

4

2 回答 2

5

您可以使用:

foreach (var group in roleGroupsCopy.ToList())

调用 ToList() 会将其复制到您循环的临时列表中。临时列表不会被修改。

另一种方法是使用:

securityRole.Groups.RemoveAll(g => g.GroupID == currentGroups[c]);
于 2013-07-20T14:11:49.140 回答
2

使用for循环而不是foreach. 请看这个

它指出:

foreach 语句用于遍历集合以获取所需的信息,但不应用于更改集合的内容以避免不可预知的副作用。

于 2013-07-20T14:12:14.920 回答