【问题标题】:For loop never satisfies a condition [duplicate]For循环从不满足条件[重复]
【发布时间】:2018-03-18 22:49:18
【问题描述】:

在当前页面(包含在 MainWindow 内的框架内)中,当我单击按钮时会发生这种情况:

    for (int i = 0; i < mw.pizzas.Length + 1; i++)
    {
        if (i == 10)
        {
            MessageBoxResult result = MessageBox.Show("You can't order more than 10 pizzas");
            break;
        }
        if (mw.pizzas[i] == null)
        {
            mw.pizzas[i] = pizza;
            break;
        }
    }
    NavigationService.Content = new AnotherPage();

mw.pizzas 字符串数组包含 10 个(我认为是未定义的)变量。我已经在 MainWindow 中定义了:

public string[] pizzas = new string[10];

我已经在当前页面定义了,像这样:

MainWindow mw = new MainWindow();

此循环通过使用变量“pizza”的内容定义这 10 个插槽来递增。定义数组的所有索引后,应该会弹出一条消息。但是,此消息从未出现。我在这里做错了什么?

编辑:这只是一个疯狂的猜测。每次导航到此页面时,这可能与我创建 new CurrentPage 有关。每次定义其中一个索引时,都会导航回上一页,然后使用NavigationService.Content = new CurrentPage();

编辑 2:看起来第二个语句有问题。 mw.pizzas[0] 为空,然后在其中获取披萨的内容,然后在程序退出页面并再次进入后以某种方式返回为空。

编辑 3:我尝试将 PizzaIDs 数组设为静态,但出现以下错误:无法使用实例引用访问成员“MainWindow.pizzaIDs”;改为使用类型名称来限定它

【问题讨论】:

  • 那是因为你不断更新newing 新的MainWindows。每个MainWindow 都有自己的pizzas 副本。您需要将pizzas 更改为static 或仅将new 更改为MainWindow。
  • 我将其更改为静态但出现此错误:无法使用实例引用访问成员“MainWindow.pizzas”;改为使用类型名称来限定它
  • 该异常是不言自明的。使用MainWindow.pizzas 而不是`mw.pizzas。

标签: c# wpf if-statement


【解决方案1】:

你的循环从 0 到 9,数组索引,当它达到 10 时,它会跳出循环并且不执行。

【讨论】:

  • 我在i &lt; mw.pizzas.Length + 1的长度上加了+1。即使是现在,我把它改成 9 后,还是不行。
  • 啊,错过了。对于那个很抱歉。您是否尝试在消息框行上设置断点?
  • 消息框行也在代码中。我相信我做到了。
  • 我明白了。问题是,您是否真的打了线而它根本没有显示?我在非 gui 线程和其他时间执行时发生过这种情况。
  • 我认为问题的发生是因为条件永远不会得到满足。我确实在条件之外测试了这段代码,消息框确实出现了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
相关资源
最近更新 更多