【问题标题】:Statement return invalid output语句返回无效输出
【发布时间】:2013-01-24 10:57:09
【问题描述】:

看下面的代码

   totLen = (r.Field<int>("Quantity") <= 0 ? 1 : r.Field<int>("Quantity")) *
   ((r.Field<decimal>("Breath") <= 0 ? 1 : r.Field<decimal>("Breath")) * 
   (r.Field<decimal>("Length") <= 0 ? 1 : r.Field<decimal>("Length")) * 
   (r.Field<decimal>("Height") <= 0 ? r.Field<decimal>("Height") : r.Field<decimal>("Height")))

在这段代码中,我认为如果 r.Field(COLUMN NAME) 的任何值为零,则应将其替换为 1 仅用于乘法 使用?和 : 条件 运算符,但它给了我错误的输出并返回 ZERO(0)...
谁能告诉我为什么会这样?

【问题讨论】:

  • 你能通过检查每个值是什么以及你得到什么来调试吗?
  • 处理零的好主意
  • 你想用这段代码实现什么?我不明白为什么如果所有字段都为零,totLen 应该是非零
  • 它肯定只有一个值会为零....

标签: c# operators conditional


【解决方案1】:

如果“高度”字段是0,您仍在乘法中使用它。

改变

r.Field<decimal>("Height") <= 0 ? r.Field<decimal>("Height") : r.Field<decimal>("Height")

r.Field<decimal>("Height") <= 0 ? 1 : r.Field<decimal>("Height")

【讨论】:

    【解决方案2】:
     totLen = (r.Field<int>("Quantity") <= 0 ? 1 : r.Field<int>("Quantity")) *
     ((r.Field<decimal>("Breath") <= 0 ? 1 : r.Field<decimal>("Breath")) * 
     (r.Field<decimal>("Length") <= 0 ? 1 : r.Field<decimal>("Length")) * 
     (r.Field<decimal>("Height") <= 0 ? 1 : r.Field<decimal>("Height")))
    

    试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多