Привет! Хочу рассказать об интересном опыте, как я писал енумератор для типа Range
, который был бы таким же дешевым, как цикл for
.
Что мы хотим?
У System.Range, как известно, очень красивый синтаксис создания:
var a = 1..2; // эквивалент new Range(1, 2)
Поэтому, как эксперимент, я решил абузить его для цикла foreach
, как замена for
:
foreach (var i in 1..5)
Console.Write(i);
(выводит 12345)
Для foreach Розлин требует метод GetEnumerator
, который возвращал бы что-то, у чего есть bool MoveNext()
и T Current. Этот метод можно добавить как метод расширения:
Читать полностью »