代码之家  ›  专栏  ›  技术社区  ›  mahesh

使用Math.Abs()方法可为空

  •  0
  • mahesh  · 技术社区  · 14 年前

    激发的重载方法错误:

    decimal? t1 = null;
    decimal? t2 = null;
    decimal? t3 = null;
    decimal res = 0;
    decimal tt1 = 0;
    decimal tt2 = 0;
    decimal tt3 = 0;
    
    if (decimal.TryParse(textBox1.Text, out tt1))
        t1 = tt1;
    if (decimal.TryParse(textBox2.Text, out tt2))
        t2 = tt2;
    if (decimal.TryParse(textBox3.Text, out tt3))
        t3 = tt3;
    res = Math.Abs(t1 + t2 - t3);
    textBox4.Text = res.ToString();
    

    6 回复  |  直到 14 年前
        1
  •  1
  •   Gabe Timothy Khouri    14 年前

    我猜你真的想 Math.Abs(tt1 + tt2 - tt3) 无论如何。

    null 如果任何输入是 无效的 ,那么也许你想要这样的东西:

        decimal? res = t1 + t2 - t3;
        if (res != null)
            res = Math.Abs(res.Value);
        textBox4.Text = res.ToString();
    
        2
  •  2
  •   Kirk Woll    14 年前

    res = Math.Abs((decimal)t1 + (decimal)t2 - (decimal)t3);
    

    或:

    res = Math.Abs(t1.Value + t2.Value - t3.Value);
    
        3
  •  1
  •   Modan    14 年前

    在更仔细地重读你的例子之后,我认为这是一个人为的例子,因为你设置t1、t2或t3的唯一原因是给了演示这个问题的机会。因此,我重新修改了我的例子,希望它更符合你的意图。

        private void button1_Click(object sender, EventArgs e)
        {
            //Read some values in a contrived example to get a mixture of null 
            //and not null values into t1, t2 & t3
            decimal? t1 = null;
            decimal? t2 = null;
            decimal? t3 = null;
            decimal res = 0;
            decimal tt1 = 0;
            decimal tt2 = 0;
            decimal tt3 = 0;
    
    
            if (decimal.TryParse(textBox1.Text, out tt1))
                t1 = tt1;
            if (decimal.TryParse(textBox2.Text, out tt2))
                t2 = tt2;
            if (decimal.TryParse(textBox3.Text, out tt3))
                t3 = tt3;
    
            //We have setup our inputs now, so lets get down to how to handle the problem                    
            //now.  This should probably be in a separate function, but we are in a _Click 
            //method, so I am assuming we are overlooking such things in this example...
    
            //return without setting textBox4 if any of t1, t2 & t3 are null
            if (!t1.HasValue || !t2.HasValue || !t2.HasValue)
            {
                return;
            }           
            //1, 2 & 3 are all valid, so set textBox4
            res = Math.Abs(t1.Value + t2.Value - t3.Value);
            textBox4.Text = res.ToString();
       }
    

    这里的要点是,当3个输入中的任何一个为空时,都不设置textBox4,而不是从Math.Abs()返回的结果中推断出这一点,还可以对可为空类型使用Value属性,而不是强制转换为Value类型,我只喜欢在样式上。。

        4
  •  0
  •   CodesInChaos    14 年前

    如果在Math.Abs中输入null,您希望得到什么结果?但您可能想使用空合并运算符??。

    res = Math.Abs(()??0);
    

    所以如果Abs的参数为空,您想得到空值吗?

    Decimal? temp=t1 + t2 - t3;
    if(temp!=null)
        temp=Math.Abs(temp.Value);
    textBox4.Text = temp.ToString();
    
        5
  •  0
  •   SwDevMan81    14 年前

    像这样的怎么样?

         decimal? a = 4;
         decimal? b = 3.254m;
         decimal? c = 9.765675m;
    
         decimal? d = (a + b - c);
    
         decimal? res = null;
         if (d != null)
         {
            res = Math.Abs((decimal)d);
         }
         textBox4.Text = (res != null) ? res.ToString() : "null";
    
        6
  •  0
  •   mahesh    14 年前

    上述问题的精确解是:-

    private void button1_Click(object sender, EventArgs e)
        {
            decimal? t1 = null;
            decimal? t2 = null;
            decimal? t3 = null;
            decimal tt1 = 0;
            decimal tt2 = 0;
            decimal tt3 = 0;
    
            if (decimal.TryParse(textBox1.Text, out tt1))
                t1 = tt1;
            if (decimal.TryParse(textBox2.Text, out tt2))
                t2 = tt2;
            if (decimal.TryParse(textBox3.Text, out tt3))
                t3 = tt3;
    
            decimal? res = t1 + t2 - t3;
            if (res != null) 
            {
                res = Math.Abs((decimal) res);
            }
    
            textBox4.Text = res.ToString();
          }
    

    请参阅此代码不会抛出任何错误,并清除使用Math.Abs()方法时的可为空问题。