Я делаю отдельную ветку здесь, потому что я верю, что если я напишу комментарий, комментарий не продвинет эту ветку вверх и, следовательно, будет уведомление для любого, кто написал в эту ветку.
Этот код был предоставлен Micheal Buen в теме Запись текста в середину файла :
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 перед входом в тело цикла?
Спасибо