コガネブログ

平日更新を目標にUnityやC#などのゲーム開発アレコレを書いていきます

【C#】開始値の指定を省略できるEnumerable.Rangeのラッパー関数を作る

for (int i = 0; i < MAX; i++)
{
    // ...
}

上記のようなfor文は終了条件を間違えて書いてしまったり
ループ変数の扱いをミスしてしまうことが少なからずあるので
このような処理を行うときはLINQのEnumerable.Range関数を使用しています

foreach (int i in Enumerable.Range(0, MAX))
{
    // ...
}

この書き方なら終了条件もわかりやすく
ループ変数iに間違って値を代入しようとすればコンパイルエラーになってくれます

ただ、Enumerable.Rangeは必ず開始値を指定しなければいけないので
下記のようなループ回数のみを指定すれば良い関数を用意してそちらを使うことが多いです

/// <summary>
/// Enumerable 型に関する汎用メソッドを管理するクラス
/// </summary>
public static partial class EnumerableCommon
{
    /// <summary>
    /// 指定した範囲内の整数のシーケンスを生成します
    /// </summary>
    /// <param name="count">生成する連続した整数の数</param>
    /// <returns>連続した整数の範囲を含む IEnumerable</returns>
    public static IEnumerable<int> Range(int count)
    {
        return Enumerable.Range(0, count);
    }
}
foreach (int i in EnumerableCommon.Range(MAX))
{
    // ...
}