This is a mirror of official site: http://jasper-net.blogspot.com/

Интересная особенность конструкции foreach в языке C#

| Monday, February 14, 2011
При написании кода на языке C# достаточно часто приходится использовать конструкцию foreach. Ведь так на много удобнее проходить по коллекциям, по сравнению с использованием цикла for. Безусловно, у каждого метода есть свои плюсы и минусы и выбор всегда зависит от конкретной задачи и ситуации. Но на днях меня удивила одни интересная особенность конструкции foreach, а  именно то, как это работает.

Рассмотрим простой пример:

image.axd?picture=2011%2f2%2fforeach.png

У нас есть некая коллекция элементов и с помощью foreach мы выводим на консоль имена всех элементов. При этом класс MyCollection выглядит так:

image.axd?picture=2011%2f2%2fcollection.png

Класс коллекции реализовывает единственный метод GetEnumerator интерфейса IEnumerable для возможности использования класса в конструкции foreach.

Особенности enumerator’а нас сейчас не интересуют, будем считать что он работает так, как ему положено.
Теперь сделаем простую вещь, а именно, поменяем наш класс MyCollection так, чтобы он больше не реализовывал интерфейс IEnumerable, при этом метод GetEnumerator оставим без изменений.


К моему удивлению, код и дальше продолжил компиляцию и правильно работал. Первым делом, посмотрим какой IL-код у нас получился:

Read more: e0ne's comments

Posted via email from Jasper-net

0 comments: