C# MVC4模型,方法总是返回0?

C# MVC4模型,方法总是返回0?,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,嗨,我在我的模型中有一个属性叫做BMI,它基本上是一种逻辑,返回一个从一个叫做CalculateBMI的方法计算出来的数字,但它总是返回0,即使我在方法中的返回值上加了一个断点,体重和身高都包含数字,但BMI从未被分配任何值 BMI属性: private int _bmi; [DisplayName("BMI")] public int BMI { get {return _bmi;} set

嗨,我在我的模型中有一个属性叫做BMI,它基本上是一种逻辑,返回一个从一个叫做CalculateBMI的方法计算出来的数字,但它总是返回0,即使我在方法中的返回值上加了一个断点,体重和身高都包含数字,但BMI从未被分配任何值

BMI属性:

 private int _bmi;
        [DisplayName("BMI")]
        public int BMI 
        {
            get {return _bmi;}
            set 
            { 
                _bmi = value;
                _bmi = CalculateBMI();

            } 
        }
CalculateBMI方法:

  public int CalculateBMI()
        {

            _bmi = Weight / (Height * Height);
            return _bmi; 
        }

因此,我相信我们在评论中所说的就是你所需要的:

public double BMI { get { return Weight / (Height * Height); } }
@ataravati也认为
DisplayName
属性是不必要的,因为它与属性名相同


您还应该将类型更改为
double
,因为结果应该是浮点值。我还要确保你的
体重
身高
属性也是
双倍
s,这样你就不会从整数除法中得到零。

所以我相信我们在评论中所说的就是你所需要的:

public double BMI { get { return Weight / (Height * Height); } }
@ataravati也认为
DisplayName
属性是不必要的,因为它与属性名相同


您还应该将类型更改为
double
,因为结果应该是浮点值。我还要确保你的
Weight
Height
属性也是
double
s,这样你就不会从整数除法中得到零。

你的属性应该是这样的,因为你不想将它设置为任何值。它是动态计算的,您只需要对其进行只读访问:

public int BMI 
{
    get 
    { 
        return CalculateBMI();
    }
}

顺便说一下,当显示名称与属性名称相同时,您不需要DisplayName属性。

您的属性应该是这样的,因为您不想将其设置为任何值。它是动态计算的,您只需要对其进行只读访问:

public int BMI 
{
    get 
    { 
        return CalculateBMI();
    }
}

顺便说一下,当显示名称与属性名称相同时,您不需要DisplayName属性。

不查看代码,这在其他响应中指出了一些问题,您需要检查您的值

导致除法的零可能来自:

  • 重量
    =0
  • 除法结果四舍五入为0,因为
    BMI
    变量的类型为
    int
所以。。。尝试调试并使用实际值进行计算。如果结果小于0.5,则很可能四舍五入为0


您可以将BMI类型更改为十进制或双精度进行尝试。

不查看您的代码,这在其他回答中指出了一些问题,您需要检查您的值

导致除法的零可能来自:

  • 重量
    =0
  • 除法结果四舍五入为0,因为
    BMI
    变量的类型为
    int
所以。。。尝试调试并使用实际值进行计算。如果结果小于0.5,则很可能四舍五入为0


您可以将BMI类型更改为
Decimal
Double
进行尝试。

这里有一大堆奇怪的代码。为什么要设置
\u bmi=value
,然后再次将其设置为
CalculateBMI()
,然后在实际方法中再次设置?我想你只需要这样:
\u bmi=CalculateBMI()
然后在你的方法中返回Weight/(Height*Height)在setter中,为什么要将
\u bmi
设置为提供的值,然后立即将其设置为其他值?看起来您甚至没有使用设置为的
值做任何事情。你就把它扔掉。为什么必须在BMI属性的设定值内计算BMI?这没有任何意义。你先取
,这应该是一个BMI值,然后用你刚刚给出的BMI计算BMI?什么!?如果要计算
BMI
属性,即将其设置为不依赖于提供的
值的方法调用,则您甚至不应该有setter。您只需要有getter,因为您无论如何都是基于其他一些属性计算BMI<代码>获取{return CalculateBMI();}
这里有一大堆奇怪的代码。为什么要设置
\u bmi=value
,然后再次将其设置为
CalculateBMI()
,然后在实际方法中再次设置?我想你只需要这样:
\u bmi=CalculateBMI()
然后在你的方法中返回Weight/(Height*Height)
在setter中,为什么要将
\u bmi
设置为提供的值,然后立即将其设置为其他值?看起来您甚至没有使用设置为的
值做任何事情。你就把它扔掉。为什么必须在BMI属性的设定值内计算BMI?这没有任何意义。你先取
,这应该是一个BMI值,然后用你刚刚给出的BMI计算BMI?什么!?如果要计算
BMI
属性,即将其设置为不依赖于提供的
值的方法调用,则您甚至不应该有setter。您只需要有getter,因为您无论如何都是基于其他一些属性计算BMI
get{return CalculateBMI();}
为糟糕的代码道歉,但是当我将其更改为上面的代码时,它仍然返回0?为糟糕的代码道歉,但是当我将其更改为上面的代码时,它仍然返回0?