无限循环跳过如果在C#中使用Continue关键字后的未来迭代中的块

时间:2015-12-18 01:00:02

标签: c# if-statement infinite-loop continue

我的代码存在问题。目标是嵌套要求用户在无限循环中输入的过程,该循环仅在提供正确信息或用户单击取消时结束。以下是我的代码:

while (true) { // Loop until correct values are given or process is canceled.
                                   // Ask for list price
#warning this area not tested (two if statements)
                        if (listPrice < 0) {
                            if (inputList.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
                                if (!double.TryParse(inputList.InputValue, out listPrice)) continue; // If value not correct restart loop
                                else break;
                            } else return false; // return from method, test failed (if cancel is pressed). 
                        }

                        if (sewpPrice < 0) {
                            if (inputSEWP.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
                                if (!double.TryParse(inputSEWP.InputValue, out sewpPrice)) continue;
                                else break;
                            } else return false; // Test automatically failed if exception was thrown trying to read pricing
                        }
                    }

然而,当&#34;继续&#34;被称为整个父母&#34;如果&#34;块(&#34; if(listPrice&lt; 0)&#34;以及&#34; if(sewpPrice&lt; 0)&#34;),将在以后的所有迭代中跳过。每个具体的&#34;如果&#34;在嵌套&#34;继续&#34;之前不会跳过块。声明被称为。例如,在循环的第二次迭代中,&#34; if(listPrice&lt; 0)&#34;语句被一起跳过,循环开始于执行&#34; if(sewpPrice&lt; 0)&#34;言。

此外,包含此代码的方法是通过Visual Studio 2015中的中间窗口调用的(因为此方法仍在测试中)。

我希望我尽可能地清楚,并且非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

问题不在于<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>" type="text/css" media="screen" /> 声明,而在于误解了double.TryParse的工作原理。如果解析失败,则会将continue存储在您指定的“out”参数中。

  

当此方法返回时,包含等效于 s 参数的双精度浮点数,如果转换成功,则或如果转换失败则为零。 < / p>

0循环的第二次迭代中,假设两个解析都失败,那么whilelistPrice都是sewpPrice0块是跳过。

你需要重新考虑你的逻辑。