簡體   English   中英

c#List <>項目正被下一項覆蓋

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

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