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

标签 c# visual-studio-2010 debugging

当我的应用程序现在触发 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[]的长度,我在下面附上了一张图片。

Weird For-Loop behaviour

更奇怪的是我第二次没有重现这个行为。

注意: 今天早些时候我遇到了类似的事情 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++);

不会引发任何错误。

最佳答案

要回答您问题的第一部分,您正在执行 Enqueue before for 循环的测试条件。所以

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

应该是:

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

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

关于c# - Visual Studio 2010 中的错误/奇怪的 For-Loop 行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13166480/

相关文章:

c# - 使用 DotTrace 问题进行内存分析

c# - 访问 IOptions<T> 对象 .NET Core

visual-studio-2010 - 无法导入 key 文件 'blah.pfx' - 错误 'The keyfile may be password protected'

c++ - 使用 SSD 加快编译时间

gcc - 如何在构建目标之外生成 gcc 调试符号?

c# - 如何将 PropertyBag 类存储到数据库中

c# - 从字典中随机输入

asp.net - Visual Studio 2008、2010 或 2012 (v11) 是为使用多核而编写的吗?

java - 在 IntelliJ 中调试时是否可以观察 BufferedImage 对象?

c# - Visual Studio 2010 调试器如何处理 XmlReader.Read 中的 XmlException?