c#List<>项目被下一个项目覆盖

时间:2015-02-26 18:46:14

标签: c# asp.net asp.net-mvc list

我有以下代码:

//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。

我尝试了所有我能想到但却没有运气的东西。

2 个答案:

答案 0 :(得分:0)

您正在为每个玩家执行相同的位置循环。该位置不会被最后一个位置覆盖,但最后一个位置将被选中。

检查您的逻辑。

答案 1 :(得分:0)

当您从视图模型中获取每个位置时,每个玩家每次都会拉出列表中相同的position个对象。

所以,让我们为玩家A和viewModel.PositionsStatic[0]说明你分配了PositionPlayerRating并将其添加到位置列表中。如果为玩家B拉出并修改了相同的对象,即viewModel.PositionsStatic[0],它将覆盖玩家A的等级。