foreach ループをインデックス付きでまわす

using System;
using System.Collections.Generic;
using System.Linq;

class Program {
    static IEnumerable<string> Three() {
        yield return "one";
        yield return "two";
        yield return "three";
    }

    static void Main() {
        var xs = new[] { 4, 23, 9, -12 };
        foreach (var e in xs.Select((v, i) => new { i, v })) {
            Console.WriteLine("index:{0} value:{1}", e.i, e.v);
        }

        Console.WriteLine("---");
        foreach (var e in Three().Select((v, i) => new { i, v })) {
            Console.WriteLine("index:{0} value:{1}", e.i, e.v);
        }
    }
}

実行結果です。

index:0 value:4
index:1 value:23
index:2 value:9
index:3 value:-12
---
index:0 value:one
index:1 value:two
index:2 value:three

リンク

stackoverflow.com