Member 13900596 Ответов: 2

Начало коллекции было изменено;


Эй, ребята, я получаю коллекцию, которая была изменена; операция перечисления может не выполняться. ошибка. Everyting работает нормально, и при сохранении я просто получаю плевок, что ошибка все еще.
public static void addItem(SocketUser user, SocketGuild guild, Item item, int amount)
{
    checkUser(user, guild);
    if (getItemList(guild).ContainsKey(item.Id)) {
        List<localItem> inventory = getPlayerInventory(user, guild);
        List<string> playerList = getInventoryList(guild);
        if (inventoryContains(item, inventory)) {
            localItem local = new localItem();
            local = getLocalItem(inventory, item);
            inventory.Remove(getLocalItem(inventory, item));
            local.amount += amount;
            inventory.Add(local);
        }
        else
        {
            localItem local = new localItem();
            local.item = item;
            local.amount += amount;
            inventory.Add(local);
        }
        foreach (string line in playerList)
        {
            if (line.Contains(user.Id.ToString()))
            {
                string newline = embedInventoryString(user.Id.ToString(), inventory);
                playerList.Remove(line);
                playerList.Add(newline);
                File.WriteAllLines("server data\\inventoryData" + guild.Id.ToString() + ".json", playerList);
                Console.WriteLine("done 2");
            }
        }
    }
}


Что я уже пробовал:

Я пытался переместить файл.WriteAllLines вокруг, потому что я думал, что он просто был изменен в неподходящее время, я не вижу ничего плохого в коде?

2 Ответов

Рейтинг:
12

Ravi Bhavnani

Вы не можете изменить коллекцию playerList при итерации через него с помощью foreach Вместо этого пройдитесь по списку с помощью индексатора.

/Рави


Рейтинг:
1

OriginalGriff

В дополнение к тому, что сказал Рави, это также очень неэффективный способ сделать это.
Вы можете посмотреть здесь: List<T> - действительно ли это так эффективно, как вы, вероятно, думаете?[^]

Я бы сделал так, чтобы ваша задача состояла в том, чтобы построить новый playerList нужного размера и либо скопируйте старый элемент, либо замените его новым.