[英]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.