System.StackOverflowException: "Exception_WasThrown" в GetEnumerator

Суть проблемы : При попытке использовать foreach на типозащищённом листе вылетает ошибка оверфлоу, я студент 1 курса учу язык только 3 месяца не бейте сильно могу тупить:( Не понимаю почему эта ошибка возникает, когда в другой программе всё нормально.

Зачем я использую форич? Я хочу вывести в messagebox список обьектов находящихся в листе(cart).

введите сюда описание изображения

Вот типозащищённый лист:

    public class Cart<T>:IEnumerable where T : IFood 
    {
        private List<T> FoodStuffs = new List<T>();
        public void Balance()
        {
            MessageBox.Show(Convert.ToString(FoodStuffs.Count));
        }
        public void Add(T item)
        {
            FoodStuffs.Add(item);
        }

        public IEnumerator GetEnumerator()
        {
            return GetEnumerator();
        }
    }

а вот основная часть программы(winform) в котором я использую foreach:

    public partial class MainForm : Form
    {
        protected string lookcarzina;
        public Cart<IFood> cart;
        public MainForm()
        {
            InitializeComponent();
            this.cart = new Cart<IFood>();
        }
        public MainForm(Cart<IFood> cart)
        {
            InitializeComponent();
            this.cart = cart;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void AddProduct_Click(object sender, EventArgs e)
        {
            AddProductForm addProductForm = new AddProductForm(cart);
            this.Hide();
            addProductForm.Show();
        }

        private void CartBalance_Click(object sender, EventArgs e)
        {
            cart.Balance();
        }

        private void CorzinaLook_Click(object sender, EventArgs e)
        {
            foreach (IFood t in cart)
            {
                lookcarzina += t.Name + Environment.NewLine;
            }
            MessageBox.Show(lookcarzina);
            lookcarzina = "";
        }
    }

Ответы (1 шт):

Автор решения: SLiver
public IEnumerator GetEnumerator()
{
    return GetEnumerator();
}

Вот тут ошибка. GetEnumerator вызывает сам себя.

То есть foreach вызывает метод 'GetEnumerator', который вызывает сам себя и так бесконечно. Памяти не хватает и вылетает ошибка.

Тебе необходимо написать другую логику. Советую посмотреть официальную документацию по IEnumerable и IEnumerator или это:

https://metanit.com/sharp/tutorial/4.11.php

Сам я не пользовался IEnumerable, но наверное такое подойдёт (я хз):

public IEnumerator GetEnumerator()
{
    return FoodStuffs.GetEnumerator();
}

То есть метод GetEnumerator обращается к закрытому (private) массиву 'FoodStuffs' и уже у него получает перечислитель ('FoodStuffs.GetEnumerator()').

→ Ссылка