Должен ли IEnumerable использовать цикл foreach?

Мне было интересно, когда я могу использовать цикл foreach? Должен ли я реализовать IEnumerable?

Ответы

Ответ 1

Нет необходимости реализовывать интерфейс IEnumerable для использования инструкции foreach. Вот цитата из MSDN (http://msdn.microsoft.com/en-us/library/9yb8xew9.aspx):

В С# это не обязательно для класса коллекции, наследуемого от IEnumerable и IEnumerator в порядке для совместимости с foreach. Как долго поскольку класс имеет необходимый GetEnumerator, MoveNext, Reset и Текущие участники, он будет работать с для каждого. Опуская интерфейсы, преимущество, позволяющее вам определить тип возвращаемого тока быть более конкретным, чем объект, который обеспечивает безопасность типа.

Ответ 2

Вы можете выделить любой объект, который реализует IEnumerable или IEnumberable<T>

Ответ 4

Спросите себя - вам действительно нужен счетчик циклов

Я использую правило, определяющее, перемещаю ли я данные между двумя индексированными контейнерами, где мне действительно нужно значение индекса для адресата, или, в более общем смысле, "мне нужно количество индексов для каждого элемента, который я есть обработка в цикле"? В таких случаях я использую цикл for, в большинстве случаев во всех других случаях (где foreach может иметь дело с контейнером, который, как отмечено выше, в значительной степени касается каждого контейнера) - причина довольно проста, выглядит довольно глупо, чтобы использовать foreach и то вам придется идти на поводу вручную поддерживать счетчик циклов.