以下はただのメモです。
foreach文でループをまわす場合、自分が何回目の周回であるかを知る方法は無いと思っていました。そのための変数を明示的にカウントアップしなければ分からないと思っていました。しかし、実はSelectメソッドと併用すると回数が分かります。
つまり、コレクションの順番に対応する0~の数字の生成はSelectメソッドに任せられるわけです。
サンプルソース1 §
通常、このfor文はforeachに置き換えられません。変数iの値が得られなくなるからです。
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string[] a = { "A", "B", "C", "D", "E", "F" };
for (int i=0; i<a.Length; i++ )
{
Console.WriteLine(i + "\t" + a[i]);
}
}
}
サンプルソース2 §
しかし、以下の書き換えは成立します。Selectメソッドが数えてくれるからです。
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string[] a = { "A", "B", "C", "D", "E", "F" };
var q = a.Select((s, i) => new { i, s });
foreach (var n in q)
{
Console.WriteLine(n.i + "\t" + n.s);
}
}
}
実行結果 (どちらも同じ) §