Я делаю отдельную тему здесь, потому что я считаю, что если я напишу комментарий, комментарий не будет толкать поток вверху, и, таким образом, будет уведомление для всех, кто написал это нить.Объяснение того, как работает этот код
Этот код был поставлен Micheal Buen в потоке Writing text to the middle of a file:
LinkedList<string> beatles = new LinkedList<string>();
beatles.AddFirst("John");
LinkedListNode<string> nextBeatles = beatles.AddAfter(beatles.First, "Paul");
nextBeatles = beatles.AddAfter(nextBeatles, "George");
nextBeatles = beatles.AddAfter(nextBeatles, "Ringo");
nextBeatles = beatles.AddAfter(nextBeatles, "George");
nextBeatles = beatles.AddAfter(nextBeatles, "Ringo");
nextBeatles = beatles.AddAfter(nextBeatles, "George");
nextBeatles = beatles.AddAfter(nextBeatles, "Ringo");
nextBeatles = beatles.AddAfter(nextBeatles, "George");
nextBeatles = beatles.AddAfter(nextBeatles, "Ringo");
nextBeatles = beatles.AddAfter(nextBeatles, "George");
nextBeatles = beatles.AddAfter(nextBeatles, "Ringo");
// change the 1 to your 5th line
LinkedListNode<string> paulsNode = beatles.NodeAt(6);
LinkedListNode<string> recentHindrance = beatles.AddBefore(paulsNode, "Yoko");
recentHindrance = beatles.AddBefore(recentHindrance, "Aunt Mimi");
beatles.AddBefore(recentHindrance, "Father Jim");
Console.WriteLine("{0}", string.Join("\n", beatles.ToArray()));
Console.ReadLine();
public static class Helper
{
public static LinkedListNode<T> NodeAt<T>(this LinkedList<T> l, int index)
{
LinkedListNode<T> x = l.First;
while ((index--) > 0)
{
x = x.Next;
Console.Write(x.Value);
Thread.Sleep(10000);
}
return x;
}
}
Что мне интересно, есть, что делает метод расширения достижения?
На первом проходе x = x.Next означает, что мы смотрим на Ринго, а не на Джорджа, и так далее. Что именно происходит под капотом и что делает код, когда я называю NodeAt (6) и далее? Я прошу об этом, так как важно иметь возможность читать и понимать код, не используя подходы к подходу в качестве помощи (иногда на работе вы, например, будете читать код в печатном документе). Кроме того, почему мы рассчитываем назад в цикле и почему существует скобка для вычитания 1 перед входом в тело цикла?
Благодаря
Nice ASCII искусства! +1 – Kredns
Да, +1 для изображения. Но список на самом деле имеет двойную связь. –
Спасибо, @Henk Я нарисовал его отдельно, потому что алгоритм пересекает список только в одном направлении. – CMS