【问题标题】:Problem with C# conditional [closed]C#条件问题[关闭]
【发布时间】:2011-09-10 10:34:59
【问题描述】:

您好,我有以下代码:

medianListTester.cfyPE = 0;

if (medianListTester.cfyPE != 0 || testStock.getCEPS() != 0)
{
    medianCYPE_price = medianListTester.cfyPE * testStock.getCEPS();
    counter++;
}

else
   //do something else

但它似乎没有“做其他事情”并且仍然触发条件内的代码。我在这里做错了吗?为什么不运行 if 语句中的代码?

【问题讨论】:

  • testStock.getCEPS() 怎么样?
  • 既然medianListTester.cfyPE0,就只检查testStock.getCEPS() != 0那个值是多少?
  • 你有没有单步调试过代码,看看当你期望它落入 else 时的值是什么?
  • 看起来有效。你确定medianListTester.cfyPE == 0testStock.getCEPS() == 0 都这样吗?
  • 让我们看看 testStock.getCEPS() 的代码

标签: c# .net conditional


【解决方案1】:

听起来testStock.getCEPS() 返回的不是 0。这可以解释为什么它永远不会命中 do something else。你检查过这是什么返回的吗?

【讨论】:

    【解决方案2】:

    medianListTester.cfyPE 设置为 0,因此 if 语句中的第一个子句的计算结果为 false。 TestStock.getCEPS() 是什么?如果它不为零,那么它将评估为真,并且整个 if 语句都为真。

    【讨论】:

      【解决方案3】:

      如果 testStock.getCEPS() 不为 0,您将不会点击 else 块。根据您的需要和期望,您可能需要使用 && 而不是 || ?

      【讨论】:

        【解决方案4】:

        我真的不知道你在问什么,但你调用 getCEPS() 两次,也许这会返回两个不同的值,也许这会给你带来麻烦。

        试试这个:

        medianListTester.cfyPE = 0;
        var ceps = testStock.getCEPS();
        if (medianListTester.cfyPE != 0 || ceps != 0) 
        {     
            medianCYPE_price = medianListTester.cfyPE * ceps;     
            counter++; 
        }  
        else    
            //do something else 
        

        【讨论】:

          【解决方案5】:

          调用 testStock.getCEPS() 的值是多少?如果那不是 0,它仍然会进入该代码块。另外,我不知道 medianListTester 引用的对象的详细信息,但可能存在无法正常工作的 getter/setter。

          解决此问题的最佳方法是在赋值之后但在 if 语句之前打印出或以某种方式查看 medianListTester.cfyPE 和 testStock.getCEPS() 的值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-18
            • 1970-01-01
            • 2015-11-04
            • 2012-09-26
            • 2014-08-08
            • 1970-01-01
            相关资源
            最近更新 更多