2018/01/05 追記
本文
久しぶりにおぉ〜〜!と思ったのでメモです。
- http://mag.autumn.org/Content.modf?id=20100726164321
- http://blogs.wankuma.com/rti/archive/2010/07/27/191691.aspx
foreachで今何回目のループなのかを知りたいという願望は誰もが一度は胸に抱いたことがあると思います。
そういうときに、一時変数を準備するよりエレガントちっくな方法です。
ただ、一般的な書き方として認知されていない可能性は否めないので人がコードを見たときに何をしてるんだろう?と思ってしまうかもしれません。ここらへん、時間が解決してくれるかな。
やり方というのは、LINQのSelectメソッドを使う方法です。Selectメソッドには、なんと、インデックスを渡してくれるオーバーロードがあるので、そこで匿名型を使ってインデックスと値のペアを作ってやるという仕組みになります。
コードに書くと以下のような感じ。
using System; using System.Linq; namespace CountForeach { class Program { static void Main(string[] args) { // テスト用配列 var array = new[] { "aaa", "bbb", "ccc" }; // Selectメソッドで値をインデックスのペアを作ってそれをforeachでまわす foreach (var item in array.Select((v, i) => new { v, i })) { // 匿名型から値とインデックスを取り出して使える Console.WriteLine("value = {0}, index = {1}", item.v, item.i); } } } }
ちょっと素敵。