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[],我在下面附上了一张图片.

更奇怪的是,我没有再次重现这种行为.
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)
不会引发任何错误.
要回答问题的第一部分,您将在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)
基本上,"增量"部分将始终在"测试"部分之前执行.
逻辑格式化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)