簡體   English   中英

C# 添加新項目時,列表中的項目會發生變化

[英]C# The items inside the list are changed when a new item is added

    public List<Player> playerList = new List<Player>();
    public List<Player> Player_A = new List<Player>();

    for (int i = 0; i < playerList.Count; i++)
            {
                if (playerList[i].Id == 1)
                {
                    playerList[i].hp = inputfiled.text;
                    Player_A(playerList[i]);
                break;
                }
        }

將 playerlist [i] 添加到列表 player_A 后。 player_A 列表中的所有項目都已更改為相同,例如剛剛添加了 playerlist [i]。 例如:

playerlist[0].hp = 100
add playerlist[0] -> playerList_A.
playerList_A[0].hp = 100

playerlist[1].hp = 50.
add playerlist[0] -> playerList_A.
playerList_A[0].hp = 50 and playerList_A[1].hp = 50;

因此,當添加新項目時,將評估以前的項目。

將 playlist[0] 添加到 player_A 時,您在堆中添加引用該內存的地址 最好創建新的項目實例,然后添加到 player_a

列表中的項目正在更改是合乎邏輯的。 這是因為您有以下代碼行:

playerList[i].hp = inputfiled.text;

您指的是 playerList 中的對象。 您似乎想創建一個新對象並將其添加到新列表中:Player_A

將您的代碼更改為:

  Player copiedPlayer = new Player();
  copiedPlayer.Id = playerList[i].Id;
  etc.
  copiedPlayer.hp = 100;
  Player_A.Add(copiedPlayer);

您還可以讓播放器實現 IClonable 並克隆對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM