#c_sharp
Есть класс - реализация очереди через List class CCQueue{ private LinkedList _items = new LinkedList (); public void Enqueue(T value) { _items.AddFirst(value); } public T Dequeue() { if (_items.Count == 0) { throw new Exception("Queue Empty"); } T last = _items.Last.Value; _items.RemoveLast(); return last; } public T Peek() { if (_items.Count == 0) { throw new Exception("Queue is empty"); } return _items.Last.Value; } } Есть класс-контейнер в котором CCQueue используется в качестве хранилища. Никак не пойму как реализовать foreach для класса контейнера. class CСCol { private CСQueue _queue; }
Ответы
Ответ 1
Вообще для использования foreach потребуется добавить в класс метод GetEnumerator() (можно реализовать интерфейс IEnumerable, но это не обязательно - foreach будет работать и так, но, например, Linq работает только с IEnumerable ). Но так, как настоящая коллекция у вас скрыта внутри CCQueue , то придется реализовать метод GetEnumerator() и в этом классе. В самом простейшем случае это может выглядеть вот так: class CCQueue { ... public IEnumerator GetEnumerator() => _items.GetEnumerator(); } class CСCol { ... public IEnumerator GetEnumerator() => _queue.GetEnumerator(); } Ответ 2
Добавьте в класс CCQueue, а также в класс контейнер (_items = объект очереди): public IEnumerator GetEnumerator() { foreach (T item in _items) { // здесь какая-то логика yield return item; } }
Комментариев нет:
Отправить комментарий