2

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

4

1 回答 1

6

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

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为最大长度)

于 2013-04-27T11:41:03.240 回答