是否有可能开始迭代从第一个使用foreach以外的元素?
我正在考虑为自定义集合(一棵树)实现IEnumerable,所以我可以使用foreach来遍历我的树。 但据我所知,foreach总是从集合的第一个元素开始。 我想selectforeach从哪个元素开始。 是否有可能以某种方式改变foreach开始的元素?
是。 请执行下列操作:
Collection<string> myCollection = new Collection<string>; foreach (string curString in myCollection.Skip(3)) //Dostuff
Skip
是一个IEnumerable函数,可以跳过你从当前索引开始指定的许多函数。 另一方面,如果你只想使用前三个,你会使用。 .Take
:
foreach (string curString in myCollection.Take(3))
这些甚至可以配对在一起,所以如果你只想要4-6个项目你可以做:
foreach (string curString in myCollection.Skip(3).Take(3))
在LINQ to Objects中使用Skip
方法最简单,跳过给定数量的元素:
foreach (var value in sequence.Skip(1)) // Skips just one value { ... }
显然,只要更改1的任何其他值跳过不同数量的元素…
同样,您可以使用Take
来限制返回的元素的数量。
您可以在我的Edulinq博客系列中阅读更多关于这两者(以及相关的SkipWhile
和TakeWhile
方法)。
您可以使用Enumerable.Skip跳过一些元素,并从那里开始。
例如:
foreach(item in theTree.Skip(9)) // Skips the first 9 items { // Do something
但是,如果您正在编写树,则可能需要在树项目本身上提供一个成员,该成员将返回一个新的IEnumerable<T>
,它将从那里枚举。 从长远来看,这可能会更有用。
Foreach
将按照您的IEnumerable
实现定义的方式迭代您的集合。 所以,尽pipe你可以跳过元素(如上面所build议的那样),但是你仍然在技术上以相同顺序迭代元素。
不知道你想实现什么,但是你的类可以有多个IEnumerable
属性,每个属性都按特定的顺序枚举元素。