C# 循环行为非常混乱
我在这个代码片段中遇到了一个非常奇怪的行为。 通常,for语句在计数到16时不输入,而是离开。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
在我的例子中,它输入
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,我也会投票支持你重新开业。