我想这真的很简单,只是涉及使用迭代器和 .MoveNext() 方法。
但是假设您正在遍历一个集合,您在集合上做了一些工作,但是根据每个“循环”中的某些条件,您可能必须抓取 2 个或更多项目并基本上跳过它们,这样您就不会在接下来循环它们.
例子:
foreach (Fish fish in ParcelOfFish)
{
GiverPersonFish(fish);
}
在这里,我只是遍历 Fish 的集合并将它们传递给一个方法。有些鱼很小,所以我必须再给那个人一条,这样它就不会饿死。
foreach (Fish fish in ParcelOfFish)
{
GiverPersonFish(fish);
if (fish.IsSmall)
{
GiverPersonFish(ParcelOfFish.MoveNext()); // here I want to give him the next fish
}
}
这将如何工作,以便我给出的第二条鱼不会在下一个循环中迭代?
同样为了使这个更棘手,一个人可能会得到一条大鱼和一条小鱼是不公平的,所以每当有一条小鱼时,我都不想从迭代中抓住另一条小鱼然后继续。
所以如果订单是
Small
Big
Big
Small
Big
Small
在第一个“循环”之后,他会得到两个小的(索引 0 和 3),它将像这样遍历其余部分:
Big
Big
Big
Small
编译器似乎不喜欢在迭代时像这样修改迭代。