コガネブログ

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

【C#】周回数が取得できるforeach文を拡張メソッドで実現する

var texts = new[] { "ピカチュウ", "カイリュー", "ヤドラン" };

foreach (var n in texts.Select((val, index) => new { val, index }))
{
    Debug.Log(n.index + ":" + n.val);
}

foreach文を使用する場合、LINQのSelect関数を使うと周回数が簡単にわかりますが
少しだけソースコードが冗長になります

そこで下記のような拡張メソッドを用意すると

/// <summary>
/// IEnumerable の各要素に対して、指定された処理を実行します。
/// </summary>
/// <typeparam name="T">IEnumerable の型</typeparam>
/// <param name="source">IEnumerable のインスタンス</param>
/// <param name="action">IEnumerable の各要素に対して実行する Action デリゲート</param>
public static void ForEach<T>(this IEnumerable<T> source, Action<T, int> action)
{
    foreach (var n in source.Select((val, index) => new { val, index }))
    {
        action(n.val, n.index);
    }
}
var texts = new[] { "ピカチュウ", "カイリュー", "ヤドラン" };
texts.ForEach((text, index) => Debug.Log(index + ":" + text));

シンプルにループ処理を記述できます