Member 13087407 Ответов: 1

Используя один объект, который нужно вставить числа в цикле for, а затем итерации через метод getenumerator


Привет,

Я погуглил о получении ответа на ваш вопрос о кодировании и наткнулся на codeproject

Я изучал дженерики C#.. и у меня есть этот кусок кода. я могу понять точку, в которой цикл foreach повторяется по количеству объектов, но здесь в этом коде создается только один объект класса CustomList<int>, который является list1, а затем list1 используется в forloop для добавления(вставки) чисел через узлы..но как здесь работает GetEnumerator..у нас был только один объект-list1, который снова и снова используется в цикле for для вставки чисел...пожалуйста, направьте, если я четко сформулирую проблему

Что я уже пробовал:

namespace GenericsusingLinkedList_25_03
{
    // Test the CustomList
    class TestCustomList
    {
        static void Main()
        {
            // Declare a List of type int, then loop through the List
            CustomList<int> list1 = new CustomList<int>();

            for (int x = 1; x <= 3; x++)
            {
                list1.Add(x);
            }

            foreach (int i in list1)
            {
              System.Console.Write(i + " ");
            }
           
            Console.ReadKey();
        }
    }
    public class CustomList<t>
    {
        // Fields
        private Node head=null;

        // The nested class is also generic on T
        private class Node
        {
            // Fields
            private Node next;

            // T as private member data type
            private T data;

            
            // Properties
            public Node Next
            {
                get
                {
                    return next;
                }
                set
                {
                    next = value;
                }
            }
            // T as return type of the Property
            public T Data
            {
                get
                {
                    return data;
                }
                set
                {
                    data = value;
                }
            }
            // T used in non-generic constructor
            public Node(T pData)
            {
                this.next = null;
                this.data = pData;
            }
        }
         // T as method parameter type:
        public void Add(T pType)
        {
            Node n = new Node(pType);

            n.Next = head;    //next of current node is assigned head of previous node
            this.head = n;    //head of current is same as n
        }
        // Enables foreach on the List
        public IEnumerator<t> GetEnumerator()
        {
            Node current = head;
            while (current != null)
            {
                yield return current.Data;
                current = current.Next;
            }
        }     
    }       
}

1 Ответов

Рейтинг:
0

Richard MacCutchan

Ключ инструкция

yield return current.Data;

что позволяет итератору получать каждый элемент коллекции по одному за раз. видеть доходность (Справочник по c# )[^].