Je pense à implémenter IEnumerable pour ma collection personnalisée (un arbre) afin que je puisse utiliser foreach pour parcourir mon arbre. Cependant, pour autant que je sache, foreach commence toujours par le premier élément de la collection. Je voudrais choisir à partir de quel élément commence chaque élément. Est-il possible de changer en quelque sorte l'élément à partir duquel foreach commence?
Oui. Procédez comme suit:
Collection<string> myCollection = new Collection<string>;
foreach (string curString in myCollection.Skip(3))
//Dostuff
Skip
est une fonction IEnumerable qui ignore le nombre spécifié en commençant à l'index en cours. D'un autre côté, si vous vouliez utiliser niquement les trois premiers, vous utiliseriez .Take
:
foreach (string curString in myCollection.Take(3))
Ceux-ci peuvent même être jumelés, donc si vous ne vouliez que les 4-6 éléments, vous pouvez le faire:
foreach (string curString in myCollection.Skip(3).Take(3))
Pour cela, il est plus simple d'utiliser la méthode Skip
dans LINQ to Objects, pour ignorer un certain nombre d'éléments:
foreach (var value in sequence.Skip(1)) // Skips just one value
{
...
}
Évidemment, changez simplement 1 pour toute autre valeur pour ignorer un nombre différent d'éléments ...
De même, vous pouvez utiliser Take
pour limiter le nombre d'éléments renvoyés.
Vous pouvez en savoir plus sur ces deux méthodes (et sur les méthodes SkipWhile
et TakeWhile
) associées dans ma série de blogs Edulinq .
Vous pouvez utiliser Enumerable.Skip pour ignorer certains éléments et le faire commencer là.
Par exemple:
foreach(item in theTree.Skip(9)) // Skips the first 9 items
{
// Do something
Cependant, si vous écrivez un arbre, vous souhaiterez peut-être fournir un membre sur l'élément d'arbre lui-même qui renverra un nouveau IEnumerable<T>
qui énumérera à partir de là-bas. Cela serait potentiellement plus utile à long terme.