Итерации по обеим коллекциям последовательно

Был на собеседовании в одной компании и вот задали такой вопрос:

Пусть есть объект public class MultiItems, содержащий две коллекции items1 и items2. Что надо сделать с объектом, чтобы на нём можно было использовать конструкцию foreach, которая привела бы к итерации по обеим коллекциям последовательно. (yield return, yield break под капотом)

Подскажите, знает кто ответ?


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

Автор решения: aepot

Проиллюстрирую совершенно правильный комментарий от @AK

Ну как что - объявить MultiItems реализующим IEnumerable.

public class MultiItems<T> : IEnumerable<T>
{
    public IEnumerable<T> Collection1 => ...;
    public IEnumerable<T> Collection2 => ...;

    public IEnumerator<T> GetEnumerator()
    {
        foreach (T item in Collection1)
            yield return item;
        foreach (T item in Collection2)
            yield return item;
    }

    IEnumerator IEnumreable.GetEnumerator()
        => this.GetEnumerator();
}

Или даже через всемогущий Linq без yield return.

public IEnumerator<T> GetEnumerator()
    => Collection1.Concat(Collection2).GetEnumerator();
→ Ссылка