C#:收藏被修改; 枚举操作可能无法执行

Get*_*ohn 4 c# enumeration

我的目标是从我的应用程序中的用户列表中删除用户.但我无法理解此错误的底部.有人请保释我.

if (txtEmailID.Text.Length > 0)
{
    users = UserRespository.GetUserName(txtEmailID.Text);
    bool isUserAvailable=false;
    foreach (EduvisionUser aUser in users) // Exception thrown in this line
    {
        isUserAvailable = true;
        if(!aUser.Activated)
        {
            users.Remove(aUser);
        }
    }
    if (users.Count == 0 && isUserAvailable)
    {
        DeactivatedUserMessage();
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 20

在使用循环迭代它时,您无法修改集合foreach.典型选择:

  • 请改用for循环
  • 创建要作用于物品的分类收集,然后通过迭代.

第二种方法的示例:

List<EduvisionUser> usersToRemove = new List<EduvisionUser>();
foreach (EduvisionUser aUser in users) --->***Exception thrown in this line***
{
    isUserAvailable = true;
    if(!aUser.Activated)
    {
        usersToRemove.Add(aUser);
    }
}
foreach (EduvisionUser userToRemove in usersToRemove)
{
    users.Remove(userToRemove);
}
Run Code Online (Sandbox Code Playgroud)

另一种选择,如果你使用的List<T>是使用List<T>.RemoveAll:

isUserAvailable = users.Count > 0;
users.RemoveAll(user => !user.Activated);
Run Code Online (Sandbox Code Playgroud)


Nea*_*alv 7

您正试图从正在循环的列表中删除用户.

这是不可能的.最好是创建一个新列表并在其中添加好列表而不是删除坏列表

if (txtEmailID.Text.Length > 0)
    {
        //@new list
        List<EduvisionUser> listOfAcceptedUsers = new List<EduvisionUser>()**

        users = UserRespository.GetUserName(txtEmailID.Text);
        bool isUserAvailable=false;
        foreach (EduvisionUser aUser in users) --->***Exception thrown in this line***
        {
            isUserAvailable = true;

            //Add user to list instead of deleting
            if(aUser.Activated)
            {
                ListOfAcceptedUsers.Add(aUser);
            }
        }

        //check new list instead of old one
        if (ListOfAcceptedUsers.Count == 0 && isUserAvailable)
        {
            DeactivatedUserMessage();
            return;
        }

    }
Run Code Online (Sandbox Code Playgroud)