foreach でループ回数を取得する
- 何度目の動き (Garbage Collection)
なるほど〜。と感心しつつ、 foreach と Select で 2 回まわっちゃっているのがちょっとなぁ、と思ったので、別の方法を。
class Test { static void Main(){ LinkedList<string> name = new LinkedList<string>(); name.AddLast("福沢祐巳"); name.AddLast("小笠原祥子"); name.AddLast("水野蓉子"); name.AddLast("島津由乃"); name.AddLast("支倉令"); name.AddLast("鳥居江利子"); name.AddLast("藤堂志摩子"); name.AddLast("佐藤聖"); name.AddLast("松平瞳子"); name.AddLast("有馬菜々"); name.AddLast("二条乃梨子"); name.ForEach((i, n) => { Console.WriteLine("{0}:{1}", i + 1, n); }); } } public static class CollectionExtention { public static void ForEach<T>(this ICollection<T> list, Action<int, T> action) { for (int i = 0; i < list.Count; i++) { action(i, list.ElementAt(i)); } } }
……拡張メソッドを使って書いてみました。(これでいいのかいまいち不安。とりあえず、コンパイルは通ったし動作確認もしましたが)
一応、ループ回数は減ったのかな。
でも ElementAt() を使っているので、パフォーマンス改善にはなっていない気がする。。。
まぁ、 ICollection