И если вы считаете, что каждый раз доставлять перечислитель раздражает, вот производный класс:
class EnumerableRange<T> : Range<T>, IEnumerable<T>
where T : IComparable<T>
{
readonly Func<T, T> _next;
public EnumerableRange(T from, T to, Func<T, T> next)
: base(from, to)
{
this._next = next;
}
public IEnumerator<T> GetEnumerator()
{
return Enumerate(this._next).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}