[英]Looping and changing a list - remove doesn't always work
我正在尝试进行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 Phone平台上工作。
我很确定您应该使用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);
}
编辑:您可能还需要考虑在开始循环之前(或将i < 39
更改为最大长度上限),确保您的rows
和pondRanks
具有足够的元素(39)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.