Visual Studio 2010中的错误/奇怪的For-Loop行为?

Chi*_*ata 1 c# debugging visual-studio-2010

我的应用程序现在触发了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]));
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是我达到了这个长度strings[],我在下面附上了一张图片.

奇怪的For-Loop行为

更奇怪的是,我没有再次重现这种行为.

NB:我今天早些时候经历过类似的事情this.CreateGraphics();我的代码是这样的:

var dc = this.CreateGraphics();//and some other stuff
Run Code Online (Sandbox Code Playgroud)

结果是,即使在尝试重新运行4次之后也未能绘制它,然后我回到代码并明确定义dc,瞧它正在工作.然后我把它改回var,它还在工作:/?

可能有什么问题?

编辑:

我刚刚发现改变顺序有效.例如:

for (int i = 0; i < strings.Length; words.Enqueue(strings[i]), i++);
Run Code Online (Sandbox Code Playgroud)

不会引发任何错误.

Cod*_*ked 6

要回答问题的第一部分,您将在for循环的测试条件之前执行Enqueue .所以

for (int i = 0; i < strings.Length; i++, words.Enqueue(strings[i]));
Run Code Online (Sandbox Code Playgroud)

应该:

for (int i = 0; i < strings.Length; i++) words.Enqueue(strings[i]);
Run Code Online (Sandbox Code Playgroud)

基本上,"增量"部分将始终在"测试"部分之前执行.

  • @ChibuezeOpata,你也正在跳过你的数组中的第0个元素. (2认同)

Lou*_*cci 5

逻辑格式化for循环,您将不会遇到该错误.

for (int i = 0; i < strings.Length; i++)
    words.Enqueue(strings[i]);
Run Code Online (Sandbox Code Playgroud)

在你的代码中,"i"增加超过条件(strings.Length)你正在运行这个单词.Enqueue on a of bounds"i".

你的循环(伪代码):

i = 0
Loop_Label:
IF i >= strings.Length THEN GoTo End_Label
... where the for loop body should go ...
i = i + 1
words.Enqueue strings[i]
GoTo Loop_Label
End_Label:
Run Code Online (Sandbox Code Playgroud)