以下是一个从相当大的应用程序中提取的小片段,以简化我的问题。我之前提交了这个问题,但是在我设法编辑我的问题之前,我的不良措辞导致它被关闭了。
这是我添加了一些日志记录行的当前片段。
int i = 0;
Console.WriteLine("Before brackets");
if (i < 0)
{
Console.WriteLine("Inside brackets");
return MyArray[i];
}
当我使用VS调试时,我看到:
i set to 0
if evaluates as false (when I hover over it in VS)
In Output: Before brackets
然后调试器在括号内执行 并执行return MyArray[i]
但是当我进入{{{I}时,我在输出中看不到Inside brackets
1}}行。
这种行为显然(对我而言)是错误的,我想知道是否有其他人遇到过类似的事情。
我使用的是Windows XP,64位计算机,带有VS10和.Net4.0。
月球
ADDITIONAL1
Henk已经要求我提供一个“控制台应用程序”,我在下面做了。但是,正如我怀疑的那样,它并没有显示出这个问题。我相信还有其他东西(线程?)在我的真实应用中引起了我的问题 - 我显然可以发布。我意识到我没有给你一个明确定义的问题 - 如果可以的话,我愿意。这就是为什么我要问这个问题 - 因为它与有类似事情的人打成了关系。为了良好的顺序,这里是控制台版本,没有出现问题。我觉得把它放在这里会增加混乱......
return MyArray[i]
ADDITIONAL 2
似乎我的问题不是执行路径只是VS调试器的错误路径之一。即好像我要进入括号内部,因为调试器会在最后一个语句中执行,但实际上我得到的结果看起来是正确的。
答案 0 :(得分:3)
我在谷歌网络搜索发现的提示后设法解决了这个问题。我似乎在"Optmise Code"
模式下运行调试器。这是我早期检查的内容,但我没有发现,尽管我已经在调试模式中取消选择此选项 - 我在标准工具栏中选择了“发布”。当我切换到“Debug
”时,问题就消失了。
答案 1 :(得分:1)
我一定错过了什么,但这是非常逻辑的?
答案 2 :(得分:1)
您确定您的if语句不符合以下条件:
if (i < 0)
Console.WriteLine(...);
return MyArray(i);
请注意误导性缩进和缺少括号。
答案 3 :(得分:0)
如果i = 0
则i < 0
为假。如果将条件设置为i <= 0
,则执行条件。