Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环和更改列表-删除不';我不总是工作_C#_List_For Loop_Windows Phone 7.1 - Fatal编程技术网

C# 循环和更改列表-删除不';我不总是工作

C# 循环和更改列表-删除不';我不总是工作,c#,list,for-loop,windows-phone-7.1,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

我尝试了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);
}
for(int i=0;i<40;i++)
{
位置=rand.Next(rows.Count);
rank=rand2.Next(pondRanks.Count);
ComputerPonds[rows[location]].Rank=(pondRanks)pondRanks[Rank];
行。删除(位置);
蓬德兰。移除(等级);
}
出于某种原因,移除并非总是发生,而且只是偶尔发生。有人有什么建议吗? 这两个列表都是列表,它们有40个元素,我想删除元素本身。
即使在调试时,我也可以看到列表计数不一样(它们都有相同的初始编号,并且都需要在这个循环中删除)。如果有关系的话,我正在windows phone平台上工作。

我很确定您不应该使用
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);
}
for(int i=0;i<39;i++)
{
位置=rand.Next(rows.Count);
rank=rand2.Next(pondRanks.Count);
ComputerPonds[location].Rank=(pondRanks)pondRanks[Rank];
行。移除(位置);
蓬德兰克斯。RemoveAt(等级);
}

<>编辑:您也可以考虑在开始循环之前确保您的<代码>行> <代码> PONDRANKS 有足够的元素(39)(或者改变<代码> i<39 < /代码>到其长度的上限)

什么类型是“代码>行< /代码>和<代码> PONDRAKS < /代码>?也许你是想用
RemoveAt
来代替。移除在某个位置移除。Remove除了查找其他答案外,还查找objectIn,值得注意的是,您的循环只执行39次。。。您需要将其更改为
,以便(int i=0;i列表为int。此外,修复此错误后,for循环将更改。我希望从列表中删除行、位置成员。感谢您的帮助!我真的必须使用RemoveAt。不知道为什么我花了这么多时间才意识到!非常感谢!!还值得注意的是,他的循环最多执行39次。最好的要做的是使用类似于
var iterations=Math.Min(MaxIterations,Math.Min(rows.Count,pondRanks.Count));
是的,这就是我上一次编辑的意思,只是没有像你那样放得好。:)即使他没有考虑列表/集合计数,当他想要40时,他的循环执行39次。他至少应该将39更改为40。@m-y啊,很好的选择。我完全忽略了这个事实。我希望删除实际成员,抱歉,名称有误导性。列表中有39个元素