简而言之: if 语句将语句评估为 false 正在执行 if 语句中的代码。我有证据:
第1步我的代码执行构造函数来创建无关名称类的新实例。构造函数接收CSV格式的字符串作为参数。然后字符串被','拆分,如果结果数组中的项数小于 x ,则应抛出异常
第2步:即使语句为false,也会引发异常!
第3步在哭泣和哭泣一段时间后,我会将完全相同数量的代码复制到下面几行。惊喜!代码表现如预期!
图像不言自明。没有诀窍。我真的很惊讶。
我可以通过将代码放在其预期行为的位置来解决这个问题。但在我看来,代码块的输出必须独立于它在文件中的位置!
答案 0 :(得分:1)
我会更新这些价值观,也许你会展示旧的价值观?关闭并重新加载项目,因为:
我只是运行你的测试,这是我从
获得的<强> LINQPad 强>:
Visual Studio (社区版)
甚至 Visual Studio代码
底线:
条件6 < 6
始终评估为false
。这是正确的。
答案 1 :(得分:1)
毕竟答案隐藏在@Eric Lippert的评论中
您是在编译发布还是调试?调试发布版本时当前行的位置有时是错误的。是否实际抛出异常?
真的没有抛出异常。虽然我正在调试调试版本,但事实是即使条件语句为false,当前行也会输入if,尽管该行未执行。
调试时,我解释说接下来要执行该行。奇怪的是,当删除下面的 try catch 块时,调试行将跳过。
我真的很尴尬你们,但事实是我已经习惯了调试,并认为突出显示的行是下一个要执行的好......
尽管如此,如果有人能解释为什么会这样,我将不胜感激。
答案 2 :(得分:0)
@DavidG我可以达到这一点,因为在调试时你可以将调试箭头移动到第一个“跳转”,如果它没有执行
这就是为什么你被允许继续超过第一个声明,它也将跳过第二个声明(还有更多的事情要进行,但它需要一个较小的博客文章和我成为Jon Skeet能够解释这一切)。
@ThomasLindvall我没有乱七八糟的断点。我知道这两个陈述都是正确的。这就是我寻求帮助的原因。我不明白为什么
6&lt; 6永远不会评估为真,在数学上不可能在西方数学中(不确定阿拉伯世界如何使用&lt;和&gt;但我看到其中一些从右到左做了更简单的操作)。查看代码下方的查看器“窗口”,它清楚地表明它是错误的。
如果您注释掉第一行,例如;
//if(strItems.Length < MinNumberOfItems)
你将在第二行崩溃
if(strItems.Length < MinNumberOfItems)
如果你想让MinNumberOfItems和strItems.Length中包含的项目数相等,你需要使用&lt; =运算符而不是&lt;。