ループ
コレクションを列挙する場合、foreachを使うことが多いのですが、要素が何番目なのか欲しい場合があります。IListが相手ならforで回せば良いですが、IEnumerableの場合だと自分でループカウンタを用意することになって、ちょっと不格好です。しかし、C#3.0だと拡張メソッドがそれなりに充実しているため、そのようなループを簡潔に書くことができます。
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApplication1 { class Program { static void Main(string args) { string ss = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" }; ss.Where( (s, i) => i % 2 == 0).ToList().ForEach( (s) => Console.WriteLine(s) ); } } } /* 結果 one three five seven nine */
Whereに引数が2つバージョンのFuncを渡すと第二引数がインデックスとなります。ただ、ずっとfor/foreachに慣れてきているので戸惑うかもしれません。
面倒だったので例ではssを配列にしていますが、IEnumerableでも同様です。