Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с реализацией списка, IEnumerator кривой 
:(
    Опции темы
lllJollyRogerlll
Дата 9.4.2016, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 20.11.2014

Репутация: нет
Всего: нет



Доброго времени суток.
Недавно начал изучать 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);
        }
    }
}

Огромное спасибо!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.