Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 1 год назад.
есть написанный класс списка с базовыми функциями, и есть класс point который добавляется в сам список и имеет собственные методы. После добавления в список нескольких объектов, в цикле пытаюсь вызвать метод Print у класса point, но ничего не получается, может кто знает как решить эту проблему?
класс узла
public class Item<T>
{
private T data = default(T);
//данный хранимые в ячейке списка
public T Data {
get { return data; }
set { if (value != null)
data = value;
}
}
//следующая ячейка списка
public Item<T> Next { get; set; }
public Item(T data)
{
Data = data;
}
public override string ToString()
{
return Data.ToString();
}
}
сам список и класс point
public class List<T> : IEnumerable
{//первый элемент списка
public Item<T> Head { get; private set; }//голова
//последний элемент списка
public Item<T> Tail { get; private set; }//хвост
//кол-во элементов
public int Count { get; private set; } //кол-во элементов
//конструкторы
//создать пустой список
public List()
{
Clear();
}
//создать список с начальным элементом
public List(T data)
{
SetHeadAndTail(data);
}
//добавить данные в конец списка
public void Add(T data)
{
if (Tail != null)
{
var item = new Item<T>(data);
Tail.Next = item;//указатель хвоста зацепили за следующий
Tail = item;
Count++;
}
else
{
SetHeadAndTail(data);
}
}
//удаление
public void Delete(T data)
{
if (Head != null)
{
if (Head.Data.Equals(data))
{
Head = Head.Next;
Count--;
return;
}
var current = Head.Next;
var previous = Head;
while (current != null)
{
if (current.Data.Equals(data))
{
previous.Next = current.Next;//смена указателя
Count--;
return;
}
previous = current;
current = current.Next;
}
}
}
private void SetHeadAndTail(T data)
{
var item = new Item<T>(data);
Head = item;
Tail = item;
Count = 1;
}
//получить перечисления всех элементов списка
public IEnumerator GetEnumerator()
{
var current = Head;
while (current != null)
{
yield return current.Data;
current = current.Next;
}
}
public override string ToString()
{
return "Linked List"+Count +"элементов";
}
public void PrintPoint()
{
point p = new point();
Console.WriteLine("{0} {1} ",p.X,p.Xname);
}
//очистка списка
public void Clear()
{
Head = null;
Tail = null;
Count = 0;
}
//добавить в начало списка
public void AppendHead(T data)
{
var item = new Item<T>(data)
{
Next = Head
};
Head = item;
}
}
public class point
{
public point()
{
}
public point(int xx,string str)
{
X = xx;
Xname = str;
}
public int X { get; set; }
public string Xname { get; set; }
public void Print()
{
Console.WriteLine("X " + X + " name " + Xname);
}
}
мейн функция
static void Main(string[] args)
{
var list = new List<point>();
list.Add(new point(1, "dadadad"));
list.Add(new point(2, "dadadad"));
list.Add(new point(3, "dadadad"));
foreach(var p in list)
{
//тут проблема
p.
}
}
Вы реализовали необобщенный (не-generic) интерфейс IEnumerable
. Компилятор не может вывести из IEnumerable
тип перебираемого объекта. Вам нужно или реализовать IEnumerable<T>
, или явно тип указать:
foreach (point p in list)
{
p.Print();
}
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
В консольном приложении пытаюсь соединиться с СУБД MySQL
Создал таблицу с помощью DataGridView в Visual StudioПосле того как я введу значения в клетку и нажму Enter,оно перескакивает на другую клетку (выделяя ее)?Как...
Всем привет! По учебе нужно написать код (обязательно рекурсивный!), который бы по заданному слову перебирал все возможные пароли, полученные...