/// <summary>
        /// Удаление элемента из списка.
        /// </summary>
        /// <param name="item">Элемент.</param>
        /// <returns>Был ли удален элемент.</returns>
        public bool Remove(T item)
        {
            var indirect = new ListCollectionNode <T>(next: _head);

            while (indirect.Next != null && !EqualityComparer <T> .Default.Equals(indirect.Next.Info, item))
            {
                indirect = indirect.Next;
            }
            var result = indirect.Next != null;

            if (result)
            {
                if (indirect.Next == _head)
                {
                    _head = _head.Next;
                }
                else
                {
                    indirect.Next = indirect.Next.Next;
                }
                Count--;
            }

            return(result);
        }
        /// <summary>
        /// Добавление звена в список.
        /// </summary>
        /// <param name="listCollectionNode">Звено, к которому происходит присоединение.</param>
        /// <param name="item">Элемент, содержащийся в новом звене.</param>
        /// <returns>Добавленное звено.</returns>
        private ListCollectionNode <T> AddNode(ref ListCollectionNode <T> listCollectionNode, T item)
        {
            Count++;
            var result = new ListCollectionNode <T>(item, listCollectionNode);

            listCollectionNode = result;
            return(result);
        }
        /// <summary>
        /// Удаление элемента по указанному индексу.
        /// </summary>
        /// <param name="index">Индекс элемента.</param>
        public void RemoveAt(int index)
        {
            if ((uint)index >= (uint)Count)
            {
                throw new ArgumentOutOfRangeException();
            }
            if (index == 0)
            {
                _head = _head.Next;
            }
            else
            {
                var indirect = GetNodeByIndex(index - 1);
                indirect.Next = indirect.Next.Next;
            }

            Count--;
        }
 /// <summary>
 /// Очистка списка.
 /// </summary>
 public void Clear()
 {
     _head = null;
     Count = 0;
 }
 public ListCollectionNode(ListCollectionNode <T> next)
 {
     Next = next;
 }
 public ListCollectionNode(T info, ListCollectionNode <T> next)
 {
     Info = info;
     Next = next;
 }