2010-10-08 4 views
2

J'ai une question à propos de LinkedList<>.
Il existe des propriétés de cette liste First et Last.LinkedList, First and Last

Est-ce que ces propriétés vont corriger si je vais régler Last.AddNext(First)?

Je dois avoir une liste où Last>Next = First, mais identifier clairement les éléments First et Last.

J'ai un cycle process.NextStep, NextStep, mais elles doivent être en mesure d'identifier chaque étape (process[i] - le i -ème étape)

.NET 2

+0

Vous voulez dire que vous essayez de créer une liste circulaire? Je doute que vous puissiez le faire avec la classe par défaut. Je m'attendrais 'Last.AddNext (First)' à ajouter une copie du premier élément à la fin de la liste mais pas créer une boucle. – Rup

Répondre

3

LinkedList<T> ne supporte pas les listes circulaires. De the docs:

La classe LinkedList<T> ne supporte pas, enchaînant le fractionnement, les cycles, ou d'autres caractéristiques qui peuvent laisser la liste dans un état incohérent.

Il n'existe aucune méthode telle que LinkedListNode<T>.AddNext(), mais je m'attendrais à toute tentative de provoquer l'échec d'un cycle avec une exception.

Vous pouvez toujours construire un itérateur basé sur LinkedList<T> mais ...

(Notez que cela échouera si la liste est vide ...)

public static IEnumerable<Tuple<T, bool, bool>> IterateInCycles<T> 
    (LinkedList<T> source) 
{ 
    LinkedList<T> node = source.First; 
    while (true) 
    { 
     yield return Tuple.Create(node.Value, 
            node.Previous == null, 
            node.Next == null); 
     node = node.Next ?? source.First; 
    } 
} 

Chaque tuple dans le la séquence de retour sera (value, isFirst, isLast) si vous voyez ce que je veux dire.

+0

e ... qu'est-ce que cela signifie, ou ... puis-je le remplacer par quelque chose ... Je pense que c'est un problème commun et il devrait y avoir une solution commune ... – serhio

+0

@serhio: Voir mon edit. –

+0

qu'est-ce que Tuple, est-ce un .NET 2, ou une classe personnalisée? – serhio

1

Vous trouverez des informations sur la création de listes circulaires dans C# here.

+0

"en utilisant la simple liste classe pour stocker vos contacts" ... solution cool. – serhio

+0

@serhio - il y a d'autres réponses que celle acceptée dans cette liste –