Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Проблема с реализацией списка, IEnumerator кривой


Автор: lllJollyRogerlll 9.4.2016, 19:47
Доброго времени суток.
Недавно начал изучать C#, игрался с кодом, пытался реализовать жалкое подобие списка. Сейчас проблема вот в чем: 
перебираю список через цикл foreach, он мне отдает начиная со второго объекта, хотя при передаче в цикл, Current списка равен первому объекту (в отладчике проверял). Из за нехватки опыта не могу разобраться, где косяк. Прошу не обзываться, сам знаю что тут черт ногу сломит.  smile  Я только учусь. Если есть советы, напутствия, с радостью приму!
Код списка:
Код

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AnonimousTypes
{
    class ListOfUsers: IEnumerator, IEnumerable
    {
        public ListOfUsers()
        {
            headUSer = null;
            CurrentUser = headUSer;
        }
        
        private int countOfUsers = 0;
        private User headUSer;
        public User HeadUser { get { return headUSer; } }
        private User CurrentUser { get; set; }
        public int Count { get { return countOfUsers; } }
        public object Current { get { return CurrentUser; } }
        public void Add(User newUser)
        {
            if (countOfUsers == 0)
            {
                headUSer = newUser;
                countOfUsers++;
                CurrentUser = headUSer;
                if (AddNewUserEventHandler != null) AddNewUserEventHandler(newUser.ToString());
            }
            else
            {
                User tmp = HeadUser;
                for (int i = 1; i < countOfUsers; i++)
                {
                    tmp = tmp.Next;
                }
                if (AddNewUserEventHandler != null) AddNewUserEventHandler(newUser.ToString());
                tmp.Next = newUser;
                countOfUsers++;
            }
        }
        
        bool IEnumerator.MoveNext()
        {
            if (CurrentUser.Next != null)
            {
                CurrentUser = CurrentUser.Next;
                return true;
            }
            else
            {
                CurrentUser = HeadUser;
                return false;
            }
        }
        void IEnumerator.Reset()
        { CurrentUser = HeadUser; }
        IEnumerator IEnumerable.GetEnumerator()
        { return this; }
        public User this [int index]
        {
            get 
            {
                User tmp = HeadUser;
                for (int i = 0; i < index; i++)
                    tmp = tmp.Next;
                return tmp;
            } 
            set 
            {
                User tmp = HeadUser;
                for (int i = 0; i < index; i++)
                    tmp = tmp.Next;
                tmp = value;
            }
        }

        public event Action<string> AddNewUserEventHandler;
    }
}


 
Класс User:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AnonimousTypes
{
    class User
    {
        public enum SEX {MALE, FEMALE};
        public SEX ItsSex { get; set; }
        public int ItsAge { get; set; }
        
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public User Next { get; set; }
        public User(SEX s = SEX.MALE, int age = 18, 
            string name = "FirstName", string secondName = "SecondName")
        {
            ItsAge = age;
            ItsSex = s;
            FirstName = name;
            LastName = secondName;
            Next = null;
        }
        public override string ToString()
        {
            return string.Format("It's {0}, {1} years old, and its name: {2} {3}",
                ItsSex, ItsAge,FirstName,LastName);
        }
    }
}

Огромное спасибо!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)