我正在尝试循环40次并在此过程中更改列表。
这是代码:
for (int i = 0; i < 40; i++)
{
location = rand.Next(rows.Count);
rank = rand2.Next(pondRanks.Count);
ComputerPonds[rows[location]].Rank = (PondRank)pondRanks[rank];
rows.Remove(location);
pondRanks.Remove(rank);
}
出于某种原因,删除不会一直发生,有时只会发生。有人有建议吗? 这两个列表都是List,它们有40个元素,我想删除元素本身。 即使在调试时我也可以看到列表计数不一样(它们都具有相同的初始数,并且它们都需要在此循环中删除)。如果重要的话,我正在开发Windows手机平台..
答案 0 :(得分:6)
我很确定你应该使用List.RemoveAt而不是List.Remove。 RemoveAt
将删除指定索引处的项目,而Remove
将查找您传入的对象,并将其从列表中删除(如果它在那里)。但我非常确定查看代码location
和rank
代表索引,而不是对象本身。
for (int i = 0; i < 39; i++)
{
location = rand.Next(rows.Count);
rank = rand2.Next(pondRanks.Count);
ComputerPonds[location].Rank = (PondRank)pondRanks[rank];
rows.RemoveAt(location);
pondRanks.RemoveAt(rank);
}
编辑:您可能还需要考虑在开始循环之前确保rows
和pondRanks
有足够的元素(39)(或者将i < 39
更改为最大值长度上限)