Доброго времени суток. Недавно начал изучать C#, игрался с кодом, пытался реализовать жалкое подобие списка. Сейчас проблема вот в чем: перебираю список через цикл foreach, он мне отдает начиная со второго объекта, хотя при передаче в цикл, Current списка равен первому объекту (в отладчике проверял). Из за нехватки опыта не могу разобраться, где косяк. Прошу не обзываться, сам знаю что тут черт ногу сломит. Я только учусь. Если есть советы, напутствия, с радостью приму! Код списка:
Код | 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); } } }
|
Огромное спасибо!! |