コガネブログ

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

【C#】ValueTuple を使用して配列やリストの foreach で簡単にインデックスを取得できる拡張メソッド

ソースコード

using System;
using System.Collections.Generic;

public static class IEnumerableExt
{
    public static IEnumerable<(int index, T value)> WithIndex<T>
    (
        this IEnumerable<T> source
    )
    {
        if ( source == null )
        {
            throw new ArgumentNullException( nameof( source ) );
        }

        IEnumerable<(int index, T value)> Impl()
        {
            var i = 0;
            foreach ( var value in source )
            {
                yield return ( i, value );
                i++;
            }
        }

        return Impl();
    }
}

使用例

通常

var index = 0;
foreach ( var value in list )
{
    Debug.Log( index + ":" + value );
    index++;
}

拡張メソッド

foreach ( var ( index, value ) in list.WithIndex() )
{
    Debug.Log( index + ":" + value );
}