Есть класс - реализация очереди через List
class CCQueue<T>
{
private LinkedList<T> _items = new LinkedList<T>();
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<T>
{
private CСQueue<T> _queue;
}
Вообще для использования foreach потребуется добавить в класс метод GetEnumerator() (можно реализовать интерфейс IEnumerable<T>, но это не обязательно - foreach будет работать и так, но, например, Linq работает только с IEnumerable<T>).
Но так, как настоящая коллекция у вас скрыта внутри CCQueue<T>, то придется реализовать метод GetEnumerator() и в этом классе. В самом простейшем случае это может выглядеть вот так:
class CCQueue<T>
{
...
public IEnumerator<T> GetEnumerator() => _items.GetEnumerator();
}
class CСCol<T>
{
...
public IEnumerator<T> GetEnumerator() => _queue.GetEnumerator();
}
Добавьте в класс CCQueue<T>, а также в класс контейнер (_items = объект очереди):
public IEnumerator<T> GetEnumerator()
{
foreach (T item in _items)
{
// здесь какая-то логика
yield return item;
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости