循环和更改列表 - 删除并不总是有效

时间:2013-04-27 11:33:44

标签: c# list for-loop windows-phone-7.1

我正在尝试循环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手机平台..

1 个答案:

答案 0 :(得分:6)

我很确定你应该使用List.RemoveAt而不是List.RemoveRemoveAt将删除指定索引处的项目,而Remove将查找您传入的对象,并将其从列表中删除(如果它在那里)。但我非常确定查看代码locationrank代表索引,而不是对象本身。

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);
}

编辑:您可能还需要考虑在开始循环之前确保rowspondRanks有足够的元素(39)(或者将i < 39更改为最大值长度上限)