Je songe à implémenter IEnumerable pour ma collection personnalisée (c'est en fait un arbre. Grâce à cela, je pourrais utiliser foreach pour parcourir mon arbre. Toutefois, pour autant que je sache, chaque itération est toujours à partir du premier élément de la collection, est-il possible Pour changer quelque chose à partir duquel chacun commence, ce que je voudrais faire, c’est avoir la possibilité de choisir l’élément à partir duquel chaque personne commence - est-ce possible?
Réponses
Trop de publicités?Oui. Faire ce qui suit
Collection<string> myCollection = new Collection<string>;
foreach (string curString in myCollection.Skip(3))
//Dostuff
skip est une fonction Ienumerable qui ignore quel que soit le nombre spécifié à partir de l'index en cours. D'autre part, si vous vouliez utiliser UNIQUEMENT les trois premiers, vous utiliseriez .take
foreach (string curString in myCollection.Take(3))
et ceux-ci peuvent même être jumelés ensemble, donc si vous vouliez seulement les 4-6 articles que vous pourriez faire
foreach (string curString in myCollection.Skip(3).Take(3))
Meilleures salutations,
Il est plus facile d'utiliser l' Skip
méthode de LINQ to Objects pour cela, pour passer d'un nombre donné d'éléments:
foreach (var value in sequence.Skip(1)) // Skips just one value
{
...
}
Bien sûr, tout changement 1 pour toute autre valeur de sauter un nombre différent d'éléments...
De même, vous pouvez utiliser Take
afin de limiter le nombre d'éléments qui sont retournés.
Vous pouvez lire plus au sujet de ces deux (et l' SkipWhile
et TakeWhile
méthodes) dans mon Edulinq blog de la série.
Vous pouvez utiliser Enumerable.Skip pour ignorer certains éléments et le faire commencer ici.
Par exemple:
foreach(item in theTree.Skip(9)) // Skips the first 9 items
{
// Do something
Toutefois, si vous écrivez une arborescence, vous souhaiterez peut-être fournir un membre sur l'élément d'arborescence lui-même qui renverra un nouveau IEnumerable<T>
qui sera énuméré à partir de là. Ce serait potentiellement plus utile à long terme.
Foreach
va parcourir votre collection de la manière définie par votre implémentation de IEnumerable
. Par conséquent, même si vous pouvez ignorer des éléments (comme suggéré ci-dessus), vous continuez techniquement à les parcourir dans le même ordre.
Vous ne savez pas exactement ce que vous essayez d'atteindre, mais votre classe pourrait avoir plusieurs propriétés IEnumerable
, chacune d'elles énumérant les éléments dans un ordre spécifique.