当我的应用程序现在触发了IndexOutOfRanage异常时,我感到很震惊。我打开了 Debugger Locals Pane ,发现我的整数越过了它的边界?基本上我的代码中有这样的东西:
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]));
}
这里的问题是我达到了strings[]
的长度,我附上了一张图片。
更奇怪的是,我第二次无法重现这种行为。
注意:我今天早些时候遇到类似this.CreateGraphics();
的问题我的代码如下:
var dc = this.CreateGraphics();//and some other stuff
结果是,即使在尝试重新运行4次之后也无法绘制它,然后我回到代码并明确定义了dc,瞧它正在工作。然后我把它改回了var,它还在工作:/?
可能出现什么问题?
修改
我刚刚发现改变订单有效。例如:
for (int i = 0; i < strings.Length; words.Enqueue(strings[i]), i++);
不会触发任何错误。
答案 0 :(得分:6)
要回答问题的第一部分,您将在 for循环的测试条件之前执行Enqueue 。所以
for (int i = 0; i < strings.Length; i++, words.Enqueue(strings[i]));
应该是:
for (int i = 0; i < strings.Length; i++) words.Enqueue(strings[i]);
基本上,“增量”部分将始终在“测试”部分之前执行。
答案 1 :(得分:5)
以逻辑方式格式化for循环,您将不会遇到该错误。
for (int i = 0; i < strings.Length; i++)
words.Enqueue(strings[i]);
在你的代码中,“i”增加超过条件(strings.Length)你正在运行word.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: