Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环行为非常混乱_C# - Fatal编程技术网

C# 循环行为非常混乱

C# 循环行为非常混乱,c#,C#,我在这个代码片段中遇到了一个非常奇怪的行为。 通常,for语句在计数到16时不输入,而是离开。 在我的例子中,它输入i=16,并执行以ArrayOutOfBoundsException结尾的零大小写 每次我调用foo() 有什么解释吗 void foo() { Thread.Sleep(2000); try { for (int i = 0; i < 16; i++) { #region Switch (switch on 0 to

我在这个代码片段中遇到了一个非常奇怪的行为。 通常,for语句在计数到16时不输入,而是离开。
在我的例子中,它输入
i=16
,并执行以
ArrayOutOfBoundsException
结尾的零大小写

每次我调用
foo()
有什么解释吗

void foo()
{
  Thread.Sleep(2000);
  try
  {
    for (int i = 0; i < 16; i++)
    {
      #region Switch
        (switch on 0 to 15 and do something unrelated)
      #endregion 
    }
  }
  catch (Exception ex)
  {
    MessageBox.Show("Exception occured: " + ex);
  }
}
void foo()
{
《睡眠》(2000年);
尝试
{
对于(int i=0;i<16;i++)
{
#区域交换机
(打开0到15,做一些不相关的事情)
#端区
}
}
捕获(例外情况除外)
{
MessageBox.Show(“发生异常:+ex”);
}
}

为什么不循环到数组长度

for (int i = 0; i < array.Length; i++)
{
    //Your secret code here
}
for(int i=0;i
还要确保没有在循环中的任何位置更改
i
的值


无论数组长度如何,此代码永远不会出现异常(除非在循环中修改
i

您没有向我们提供导致错误的代码。如果没有看到for循环的内部结构,则问题一定会出现在那里。有东西在改变for循环中i的值。发布创建数组的部分和访问数组的部分。还有stacktrace。
ArrayOutOfBoundsException
您确定吗?在.Net中没有这样的例外!嗯,我现在不能发布答案,因为问题被搁置了。但是出现错误的原因是,
BeginInvoke
将UI线程空闲时要执行的操作排队。因此,当代码实际运行时,for循环变量的值将达到最终值16。您假设发送到
BeginInvoke
的lambda中的代码在添加到队列时将以
i
的值执行。它不是。+1表示
这里的密码
我通常在数组长度上循环,但我想找到错误,所以我使用了不同的values@JulianSchaefer如果您发布了原始代码,那么您将在几分钟内得到答案。由于您对显示代码不感兴趣,我们可以提供以下帮助:@JulianSchaefer如果你能将代码编辑到你当前的问题中,并填补空白,我将投票重新打开。谢谢,你可以这么做,我同意@JMK,我也会投票支持你重新开业。