我有以下代码:
//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。
我尝试了所有我能想到但却没有运气的东西。
答案 0 :(得分:0)
您正在为每个玩家执行相同的位置循环。该位置不会被最后一个位置覆盖,但最后一个位置将被选中。
检查您的逻辑。
答案 1 :(得分:0)
当您从视图模型中获取每个位置时,每个玩家每次都会拉出列表中相同的position
个对象。
所以,让我们为玩家A和viewModel.PositionsStatic[0]
说明你分配了PositionPlayerRating并将其添加到位置列表中。如果为玩家B拉出并修改了相同的对象,即viewModel.PositionsStatic[0]
,它将覆盖玩家A的等级。