2010-02-16 3 views
2

J'ai une collection d'objets dans une liste générique. Je me demande quelle est la meilleure façon de naviguer dans cette collection. Je veux effectuer des opérations telles que "MoveNext", "MovePrevious", etc.Navigation dans une liste générique de collection dans C#

Fondamentalement, ma collection est un certain nombre d'étapes dans un flux et je veux être en mesure de se déplacer le long des étapes.

Y at-il un équivalent de C# MoveNext et MovePrevious dans Sql

+0

Qu'est-ce que SQL a à voir avec ça? –

Répondre

6

Vous pouvez utiliser la classe LinkedList<T>.
Chaque élément a une référence à la précédente et à la suivante.
Vérifiez le lien vers la documentation pour obtenir des exemples.

+0

Cela peut fonctionner correctement – Solyad

+0

L'objet LinkedList a fonctionné. Cela m'a pris un peu de temps pour trouver un système basé sur un paramètre de recherche et activer les contrôles en conséquence (je construis un gestionnaire de workflow primitif sur un système de formulaire dynamique et je veux pouvoir le "demander" où est-ce dans le flux que je peux activer certains contrôles, changer la configuration du formulaire et ramener l'utilisateur au même point dans la chaîne plus tard). Je pense que cela fonctionnera. – Solyad

0

Je ne suis pas au courant des fonctionnalités intégrées pour ce faire, mais vous pouvez le faire très simplement en ayant une variable contenant l'index. Quand vous voulez MoveNext puis i ++ et quand vous voulez MovePrevious, utilisez i-- (c'est-à-dire que vous utilisez i comme variable).

EDIT: J'avais tort. Voici un extrait de MSDN qui fait exactement ce que vous demandez. Je ne l'ai pas regardé profondément, mais il était dans l'article sur StringCollections

public static void PrintValues2(StringCollection myCol) { 
     StringEnumerator myEnumerator = myCol.GetEnumerator(); 
     while (myEnumerator.MoveNext()) 
     Console.WriteLine(" {0}", myEnumerator.Current); 
     Console.WriteLine(); 
    } 
3

Il suffit d'ajouter une propriété Current à votre liste.

non testé. semble juste.

et il y a une garde que vous devez mettre en œuvre à votre convenance, par ex. l'indice de départ. devriez-vous commencer à -1 et exiger un movenext? à vous

public class BackAndForthList<T> : List<T> 
    { 
     private int _current = 0; 

     public T Current 
     { 
      get { return this[_current]; } 
     } 

     public void MoveNext() 
     { 
      _current++; 
      if (_current >= Count) 

      { 
       _current = 0; 
      } 
     } 

     public void MovePrevious() 
     { 
      _current--; 

      if (_current < 0) 
      { 
       _current = Count - 1; 
      } 
     } 
    } 
+0

Cela pourrait bien fonctionner aussi. Pourquoi ne puis-je pas marquer deux réponses dans stackoverflow;) Eh bien, merci, votez au moins! – Solyad

1

Pour aller de l'avant, vous pouvez utiliser un recenseur:

list.GetEnumerator().MoveNext() 
0

Utilisez un BindingList ou BindingSource ou tirer vos propres à partir soit.

Questions connexes