C# Visual Studio 2010中的bug/循环行为的怪异?

C# Visual Studio 2010中的bug/循环行为的怪异?,c#,visual-studio-2010,debugging,C#,Visual Studio 2010,Debugging,当我的应用程序现在引发IndexOutOfRanage异常时,我感到震惊。我打开调试器局部变量窗格,发现我的整数跨越了它的边界?基本上,我的代码中有如下内容: string folder = Extender.GetSetting<string>("textFolder"); string mlink = folder + "\\" + filename + ".txt"; if(File.Exists(mlink)) { string fContent = File.Rea

当我的应用程序现在引发IndexOutOfRanage异常时,我感到震惊。我打开调试器局部变量窗格,发现我的整数跨越了它的边界?基本上,我的代码中有如下内容:

string folder = Extender.GetSetting<string>("textFolder");
string mlink = folder + "\\" + filename + ".txt";
if(File.Exists(mlink))
{
    string fContent = File.ReadAllText(mlink);
    rtbLearnGuide.Text = fContent;
    string[] strings = fContent.Split(' ');
    for (int i = 0; i < strings.Length; i++, words.Enqueue(strings[i]));
}
结果是,即使在尝试重新运行了4次之后,它仍然无法绘制它,然后我回到代码并显式定义了dc,瞧,它正在工作。然后我把它改回var,它仍然在工作:/

可能有什么问题

编辑:

我刚刚发现改变顺序是有效的。例如:

for (int i = 0; i < strings.Length; words.Enqueue(strings[i]), i++);
for(inti=0;i

不会触发任何错误。

逻辑地格式化for循环,您将不会出现该错误

for (int i = 0; i < strings.Length; i++)
    words.Enqueue(strings[i]);

逻辑地格式化for循环,您将不会出现该错误

for (int i = 0; i < strings.Length; i++)
    words.Enqueue(strings[i]);

要回答问题的第一部分,您需要在for循环的测试条件之前执行排队。所以

for (int i = 0; i < strings.Length; i++, words.Enqueue(strings[i]));
for(int i=0;i
应该是:

for (int i = 0; i < strings.Length; i++) words.Enqueue(strings[i]);
for(inti=0;i

基本上,“增量”部分总是在“测试”部分之前执行。

为了回答问题的第一部分,您在for循环的测试条件之前执行排队。所以

for (int i = 0; i < strings.Length; i++, words.Enqueue(strings[i]));
for(int i=0;i
应该是:

for (int i = 0; i < strings.Length; i++) words.Enqueue(strings[i]);
for(inti=0;i


基本上,“递增”部分总是在“测试”部分之前执行。

Eh,不。实际上,除了递增之外,for循环中还可以有多个语句。@ChibuezeOpata-是的,但它们将在测试部分之前执行,正如我所说。@ChibuezeOpata,你也跳过了数组中的第0个元素,这样做了。@heavyd-接得好,我没想到!是的,我同意你的观点,但是你仍然可以把测试部分放在里面。我以前是这样编码的,所以我把位置换成:
for(inti=0;I,它可以工作。呃,不。事实上,除了递增之外,for循环中还可以有多个语句。@ChibuezeOpata-是的,但它们将在测试部分之前执行,正如我所说的那样。@ChibuezeOpata,你也在跳过数组中的第0个元素,这样做。@heavyd-捕捉得好,我没有想到这一点!是的,我同意你的观点,但是你仍然可以把测试部分放在里面。我以前是这样编码的,所以我把位置换成:
for(inti=0;I,它是有效的。有什么原因让你不想像大多数开发人员期望的那样编写for循环吗?
如果你喜欢组合语句,为什么要停止你所做的呢
words.Enqueue(strings[i++])
但是@code裸体的问题真的起了作用。不完全是,这实际上只是我的一个发现,不知道多个for循环语句是向后执行的…@ChibuezeOpata,它们不是向后执行的。使用您更新的代码
words.Enqueue(strings[i])
首先运行,然后增量
i++
运行。我一定喝了一些死咖啡,谢谢@heavyd!!!有什么理由不想像大多数开发人员所期望的那样编写for循环吗?
如果你喜欢组合语句,为什么要停止你所做的呢
words.Enqueue(strings[i++])
但是@code裸体的问题真的起了作用。不完全是,这实际上只是我的一个发现,不知道多个for循环语句是向后执行的…@ChibuezeOpata,它们不是向后执行的。使用您更新的代码
words.Enqueue(strings[i])
首先运行,然后增量
i++
运行。我一定喝了一些死咖啡,谢谢@heavyd!!!嗯,我真的不明白你说的逻辑是什么意思。。谢谢though@ChibuezeOpata他所说的“逻辑”是指基于一种非常成熟的标准实践,即如何为
循环格式化
,这种做法在大多数程序员的头脑中根深蒂固,以至于违反它是非常不合逻辑的。。谢谢though@ChibuezeOpata他所说的“逻辑”是指基于非常成熟的标准实践,即如何为
循环格式化
,这种做法在大多数程序员的头脑中根深蒂固,以至于违反它是非常不合逻辑的。