2010-10-08 3 views
2

У меня есть вопрос о LinkedList<>.
Есть свойства этого списка First и Last.LinkedList, First and Last

Будет ли это правильно, если я установил Last.AddNext(First)?

Мне нужно иметь список, где Last>Next = First, но четко определить First и Last элементов.

У меня есть цикл process.NextStep, NextStep, но должен быть в состоянии идентифицировать каждый шаг (process[i] - в я -й шаге)

.NET 2

+0

Вы имеете в виду, что пытаетесь создать круговой список? Я сомневаюсь, что вы можете сделать это с классом по умолчанию. Я бы ожидал 'Last.AddNext (First)', чтобы добавить копию первого элемента в конец списка, но не создать цикл. – Rup

ответ

3

LinkedList<T> не поддерживают круговые списки. От the docs:

LinkedList<T> класс не поддерживает, СЦЕПЛЕНИЕ расщепление, циклы или другие функции, которые могут оставить список в неустойчивом состоянии.

Нет такого метода, как LinkedListNode<T>.AddNext(), но я бы ожидал любой попытки вызвать сбой цикла с исключением.

Вы всегда можете создать итератор на основе на LinkedList<T> хотя ...

(Обратите внимание, что это не сработает, если список пуст ...)

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; 
    } 
} 

Каждый кортеж в Последовательность возврата будет (value, isFirst, isLast), если вы понимаете, что я имею в виду.

+0

e ... что это значит, или ... я могу заменить его чем-то ... Я думаю, что это обычная проблема, и должно быть общее решение ... – serhio

+0

@serhio: См. Мое редактирование. –

+0

Что такое Tuple, это .NET 2 или пользовательский класс? – serhio

1

Существует некоторая информация о том, как создавать круговые списки в C# here.

+0

", используя простой список класс для хранения ваших контактов" ... классное решение. – serhio

+0

@serhio - есть другие ответы, кроме принятого в этом списке –

Смежные вопросы