多分for文の仕様が危険なんだと思うな
デフォルトで変数を作ってコピーする、foreachのような実装になってれば
問題ないわけだろ

public static void For(this int start, int end, Action<int> action)
{
 for(int i = start; i < end; ++i)
  action(i);
}

0.For(10,i =>{
 list.Add(() => Console.WriteLine(i));
});