C# списки и объекты класса [закрыт]

303
06 ноября 2021, 17:10
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 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.
        }

    }
Answer 1

Вы реализовали необобщенный (не-generic) интерфейс IEnumerable. Компилятор не может вывести из IEnumerable тип перебираемого объекта. Вам нужно или реализовать IEnumerable<T>, или явно тип указать:

foreach (point p in list)
{
    p.Print();
}
READ ALSO
Ошибка соединения с MySQL (The type initializer for &#39;MySql.Data.MySqlClient.Replication.ReplicationManager&#39; threw an exception)

Ошибка соединения с MySQL (The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception)

В консольном приложении пытаюсь соединиться с СУБД MySQL

115
&quot;XPath&quot; VS &quot;Linq to Xml&quot;

"XPath" VS "Linq to Xml"

Я хочу, чтобы программа работала с файломxml

143
С# DataGridView

С# DataGridView

Создал таблицу с помощью DataGridView в Visual StudioПосле того как я введу значения в клетку и нажму Enter,оно перескакивает на другую клетку (выделяя ее)?Как...

242
C# алгоритм перебора паролей

C# алгоритм перебора паролей

Всем привет! По учебе нужно написать код (обязательно рекурсивный!), который бы по заданному слову перебирал все возможные пароли, полученные...

211