Какая разница между интерфейсами IEnumerable и IEnumerator?
Из моих примерных знаний интерфейс IEnumerator предоставляет доступ к разным элементам из какой то определенной коллекции, а интерфейс IEnumerable предоставляет доступ к объекту класса который реализует IEnumerator.
В каких случаях нужно использовать данные интерфейсы по отдельности и есть ли смысл использовать оба сразу?
Та сущность, по которой пробегают, должна реализовывать IEnumerable.
Та сущность, которая пробегает, должна реализовывать IEnumerator (обычно это вложенный, нередко приватно объявленный класс).