Enumerable.Rangeを調べてみた

とあるListを作成したいときに通常なら次のようなコードを書くとします。

var lists = new List<int>();
for (int i = 0; i < 5; i++)
{
    lists.Add(i);
}

実はこのような記述はLinqを使うと次のように置き換えることができます。

var lists = Enumerable.Range(0, 5).Select(x => x).ToList();

Enumerable

EnumerableはLinqで定義をされている IEnumerableを継承したクラスで利用できる拡張メソッド郡です。 Enumerable クラス (System.Linq) | Microsoft Docs

IEnumerator とは

ここで登場するIEnumeratorとは何でしょうか? このインタフェースはListやDictionayで使われています。

何を定義しているか

IEnumerator で定義されているのは次のメソッドです。

IEnumerator GetEnumerator();

公式によるとこのメソッドは次のように説明されています。

指定した型のコレクションに対する単純な反復処理をサポートする列挙子を公開します。

IEnumerator

GetEnumeratorはIEnumeratorという型が戻り値として定義されています。 次のメソッドが定義されています。

public interface IEnumerator
{
    object Current { get; }

    bool MoveNext();

    void Reset();
}