我想这真的很简单,只涉及使用迭代器和 .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
编译器似乎不喜欢在遍历迭代时像那样修改迭代。
最佳答案
从设计上讲,迭代并不意味着要像这样工作。如果您需要更灵活的行为,您应该使用 for 循环。
关于c# - 在每次迭代中有条件地使用不同数量的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360555/