[英]C#: When adding an Item to a List, the previous List Items get overwritten with the Item as well. Why?
[英]c# List<> item is being overwritten by the next item
我有以下代碼:
//for each player, calculate his position rating
for (int i = 0; i < viewModel.PlayerList.Count; i++)
{
var player = viewModel.PlayerList[i];
var positionList = new List<Position>();
for (int j = 0; j < viewModel.PositionsStatic.Count; j++)
{
var position = viewModel.PositionsStatic[j];
var positionPlayerRating = 0;
for (int k = 0; k < player.AttributesList.Count; k++)
{
var attrib = player.AttributesList[k];
try
{
var selectedAttrib =
position.AttribsByPosition.FirstOrDefault(x => x.AttributeId == attrib.AttributeId);
if (selectedAttrib != null)
{
positionPlayerRating = positionPlayerRating + selectedAttrib.AttributePlayerPosMult * Convert.ToInt32(attrib.AttributeValue);
}
}
catch (Exception exception)
{
string exc = exception.Message;
throw;
}
}
position.PositionPlayerRating = positionPlayerRating;
positionList.Add(position);
}
player.PositionList = new List<Position>(positionList);
playerList.Add(player);
}
問題是在playerList中,每個玩家的PositionList總是相同的。 發生的事情是它正在使用下一個PositionList並覆蓋前一個PositionList,因此我有效地擁有最后一個positionList的所有玩家,而不是不同的positionLists。
我嘗試了所有我能想到但卻沒有運氣的東西。
您正在為每個玩家執行相同的位置循環。 該位置沒有被最后一個位置覆蓋,但是最后一個位置被挑選出來。
檢查你的邏輯。
當您從視圖模型中獲取每個位置時,每個玩家每次都會拉動列表中的相同position
對象。
因此,假設玩家A和viewModel.PositionsStatic[0]
指定了PositionPlayerRating並將其添加到位置列表中。 如果為玩家B拉出並修改了相同的對象,即viewModel.PositionsStatic[0]
,它將覆蓋玩家A的等級。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.