Инструкция foreach не может работать с переменными типа «Программа»

У меня следующая проблема с моим кодом (я делаю простой связанный список) .

Ошибка CS1579

Инструкция foreach не может работать с переменными типа Program, поскольку Program не содержит определения общедоступного экземпляра для GetEnumerator.

Я пытался сделать foreach, чтобы сравнить, какой из элементов был второстепенным (а затем устранить его). Но я получаю ошибку, что List имеет тип Program, я не могу сделать foreach.

Мой код:

    class Program
    {

        private Nodo primero;
        private int size;
        public Program() { 
            this.primero = null;
            this.size = 0;
        }

        public void AddNodo(int data) //Para el primer programa: Agregar los datos con su nodo
        {
            Nodo nuevo = new Nodo(data);// agregar nodo
            nuevo.next = primero; //para ir al primer nodo
            primero = nuevo; //coloca el elemento de primero
            size++;
        }

        public int Size() { //Para el primer programa, el size de la list
            return size;
        }
        public void listar() //Para el primer programa, para listar los elementos 
        {
            Nodo actual = primero;
            while (actual!=null)
            {
                Console.Write("[" + actual.data +"]->");
                actual = actual.next;

            }
        }
        public void DeleteList(int s) //para eleminar en una posicion especifica
        {
            Nodo anterior = primero;
            Nodo actual = primero;
            int dat = 0;
            if (s>0)
            {
                while (dat!= s && actual.next !=null)
                {
                    anterior = actual;
                    actual = actual.next;
                    dat++;
                }
                anterior.next = actual.next;
            }


        }
        static void Main(string[] args)
        {

                case 1: //lista simplemente enlazada
                    Program Lista = new Program();
                    //Lista.ListaVacia();
                    Lista.AddNodo(5); //Para agregar el elemento; el ultimo elemento de la lista
                    Lista.AddNodo(85);
                    Lista.AddNodo(34);
                    Lista.AddNodo(56);
                    Lista.AddNodo(9);
                    Lista.AddNodo(12);// el primer elemento de la lista; cabeza o head


                    Lista.listar();
                    //Lista.DeleteList();
                    Console.WriteLine(" ");
                    Console.WriteLine("Size " + Lista.Size()); //para el size

                    foreach (var item in Lista) //aqui es que me aparece el error
                    {

                    }

        }
    }
}
1
задан 29.11.2019, 09:20
2 ответа

Для того, чтобы ты смог использовать foreach, это должен быть класс, который он получал в наследство бы от ICollection (и какая-то mГЎs), но что это не случай, sГіlo у тебя есть объект.

, Хотя ты назовешь это Списком, - как будто ты это объявил типа string, string не может быть использованным в прямой части IN foreach.

Collection, Arrays, List. Эти типы, если они могут быть использованными в foreach. Если у тебя есть какое-то сомнение, прокомментируй мне это и мы видим, могу ли я помогать тебе.

Приветствие!!

0
ответ дан 01.12.2019, 10:39
  • 1
    какой я могу делать, что Он Заносит в список, был collection или List? Которым я попробовал это конвертировать List и не смог. Большое спасибо из-за Вашего комментария! – 艾莎月 29.11.2019, 02:19

Чтобы мочь использовать цикл foreach ты нуждаешься в том, чтобы осуществить интерфейс IEnumerable, так как цикл нуждается в , что у класса был один mГ©todo GetEnumerator(), чтобы это призывать и asГ - мочь повторять на элементах.

, Поскольку я это вижу, и так как estГЎs делая соединенный список, ты recomendarГ - во что-то asГ-:

public IEnumerable<Nodo> Nodos
{
    List<Nodo> l = new List<Nodo>();
    Nodo actual = this.primero;
    do
    {
        l.Add(actual);
        actual = actual.next;
    }
    while (actual != null);
    return l;
}

В конце концов podrГЎs повторять следующего способа:

foreach (var item in Lista.Nodos)
{
    ...
}
0
ответ дан 01.12.2019, 10:39

Теги

Похожие вопросы