C# list.remove делает странные вещи
Здравствуйте, я делаю текстовый симулятор hungergames на c#.
В моем коде у меня есть список со всеми игроками и их статистикой.
этот список состоит из класса под названием Player с переменными i nit,такими как name, kills и alive bool, чтобы проверить, жив ли игрок.
иногда в моем коде мне нужно выбрать случайного игрока, который жив. проблема с этим заключалась в том, что потребовалось слишком много времени, чтобы получить случайного игрока, потому что на поздних стадиях игры njot manyy people, где живые и случайный генератор всегда выбирали людей, которые мертвы, и я не могу их использовать.
поэтому я решил добавить второй список игроков под названием AlivePlayers. это то же самое, что и обычный список игроков onlt в этом списке я могу удалить игроков из lsit, когда они мертвы. я не могу сделать это в списке игроков, потому что мне нужно сохранить статистику от игроков.
поэтому, решив эту проблему, я начал писать код для фактического удаления игрока из списка. и вот тут-то все и пошло наперекосяк.
сначала я начал с написания кода для удаления игроков из списка alivePlayers. я запустил свою программу и проследил за значениями списков в окне просмотра. затем я увидел, что в тот момент, когда я запустил метод удаления списка, элементы удаляются из списка alivePlayers, но также и из списка игроков. сначала я подумал, что проблемы были где-то еще в моем коде, поэтому я прокомментировал удаленную часть и попробовал еще раз. но ничего не знаю Гоц удален, так почему же удалить методом удаляет из 2 списков ?
вот та часть кода, которая это делает:
if(action.Element("Action").Element("lethalto").Value != "none") { string rawString = action.Element("Action").Element("lethalto").Value; string[] playersToKill = rawString.Split('-'); foreach(string player in playersToKill) { string playerIdString = player.Replace('p', ' '); int playerId = Int32.Parse(playerIdString); SurvivalGames.alivePlayers.Remove(affectedPlayers[playerId - 1]); } }
не фокусируйтесь на rawString и playersToKill. мой код написан так, что его можно настроить с помощью xml. эти переменные предназначены только для получения индексов игроков, которые должны быть удалены. эти 2 работают нормально, я уже проверил их.
affectedPlayers-это список игроков, которые затронуты. в этом случае я хочу удалить затронутых игроков из списка alivePlayers. playerId - это индекс игрока из списка затронутых игроков, который нам нужно удалить. я вычитаю 1, Чтобы не получить ошибку за пределами границ.
Итак, кто-то знает, почему метод remove() удален из обоих списков, а не только из alivePlayers ?
ps: извините за мой плохой английский, это не мой основной язык. и не стесняйтесь задавать вопросы, если вы чего-то не понимаете.
Что я уже пробовал:
поискав в google, но я не нашел ничего, связанного с моей проблемой.