Итерации по обеим коллекциям последовательно
Был на собеседовании в одной компании и вот задали такой вопрос:
Пусть есть объект 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();