【发布时间】:2015-02-26 18:46:13
【问题描述】:
我有以下代码:
//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 的所有玩家,而不是不同的 positionLists。
我尝试了所有我能想到的方法,但没有运气。
【问题讨论】:
-
请展示一个简短但完整的程序来说明问题。我的猜测是您的
playerList只是对同一个Player对象有多个引用,但我们无法从您向我们展示的内容中真正分辨出来。 -
当您只需要对集合中的每个项目执行操作而不需要知道集合中的位置时,请考虑使用
foreach而不是for。这将使您的代码更具可读性。 -
在不相关的注释中,
catch块是无用的,因此应该删除 try/catch 结构。
标签: c# asp.net asp.net-mvc list