虽然数组中有足够的项目,但索引超出For循环范围

时间:2017-07-06 13:24:21

标签: c# arrays for-loop foreach

我试图在c#中测试这种在foreach中重用循环变量的情况,如下面的问题所述

Is there a reason for C#'s reuse of the variable in a foreach?

在浏览thisthis之后,我尝试使用for循环重现此错误,因为foreach部分已在c#版本中修复。

但令我惊讶的是,当我尝试this code时,我得到了一个“索引超出了数组的范围。”代码异常。虽然我的数组有4个项目,但我正在尝试访问第3个索引。

public static void Main()
{
var strings = new string[] { "sd2", "dafs3", "dasd5", "fdf6" };
var actions = CreateActions(strings);
actions.ForEach(f => f());
}
private static List<Action> CreateActions(string[] strings)
{
   var actions = new List<Action>();
   for (int i = 0; i < 4; i++)
   {
      Console.WriteLine(i);
      var fiber = strings[i];
      actions.Add(() => Console.WriteLine(strings[i]));
   }
  return actions;
}

然后我改变了我的代码

public static void Main()
{
var strings = new string[] { "sd2", "dafs3", "dasd5", "fdf6" };
var actions = CreateActions(strings);
actions.ForEach(f => f());
}
private static List<Action> CreateActions(string[] strings)
{
   var actions = new List<Action>();
   for (int i = 0; i < 4; i++)
   {
      Console.WriteLine(i);
      var fiber = strings[i];
      actions.Add(() => Console.WriteLine(fiber));
   }
  return actions;
}

这段代码运行正常,我没有超出范围异常,这很奇怪。关于重用变量我的案例也得到了证明。

我的第一个代码有这个输出,如果在for循环中运行到索引2,则索引3抛出超出范围的异常。

0
1
2
fdf6
fdf6
fdf6

我的第二个代码片段给出了这个输出并列出了输出中的所有4个项目

0
1
2
3
sd2
dafs3
dasd5
fdf6

c#是否有任何解释或我的测试代码有任何问题。

0 个答案:

没有答案