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

use*_*613 2 c# for-loop list 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);
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,删除不会一直发生,有时只会发生.有人有建议吗?这两个列表都是List,它们有40个元素,我想删除元素本身.即使在调试时我也可以看到列表计数不一样(它们都具有相同的初始数,并且它们都需要在此循环中删除).如果重要的话,我正在开发Windows手机平台..

Chr*_*air 6

我很确定你应该使用List.RemoveAt而不是List.Remove.RemoveAt将删除指定索引处的项目,而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);
}
Run Code Online (Sandbox Code Playgroud)

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