//метод, извлекающий элемент из начала неизменяемой очереди и возвращающий новую очередь public ImmQueue <T> Dequeue() { ImmQueue <T> temp = new ImmQueue <T>(); LinkedListNode <T> node = list.First; //копируем значения из данного this-класса в наш обЪект, который мы только что создали while (node != null) { temp.list.AddLast(node.Value); node = node.Next; } //удаляем value не в this-классе, а в созданном только что объекте и возвращаем его temp.list.RemoveFirst(); return(temp); }
//метод, добавляющий value в конец неизменяемой очереди и возвращает новую очередь public ImmQueue <T> Enqueue(T value) { //создаем объект данного класса, который будем возвращать ImmQueue <T> temp = new ImmQueue <T>(); LinkedListNode <T> node = list.First; //копируем значения из данного this-класса в наш обЪект, который мы только что создали while (node != null) { temp.list.AddLast(node.Value); node = node.Next; } //добавляем value не в this-класс, а в созданный только что объект и возвращаем его temp.list.AddLast(value); return(temp); }