C# MVC4模型,方法总是返回0?
嗨,我在我的模型中有一个属性叫做BMI,它基本上是一种逻辑,返回一个从一个叫做CalculateBMI的方法计算出来的数字,但它总是返回0,即使我在方法中的返回值上加了一个断点,体重和身高都包含数字,但BMI从未被分配任何值 BMI属性: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
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
您可以将BMI类型更改为十进制或双精度进行尝试。不查看您的代码,这在其他回答中指出了一些问题,您需要检查您的值 导致除法的零可能来自:
=0重量
- 除法结果四舍五入为0,因为
变量的类型为BMI
int
您可以将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,因为您无论如何都是基于其他一些属性计算BMIget{return CalculateBMI();}
为糟糕的代码道歉,但是当我将其更改为上面的代码时,它仍然返回0?为糟糕的代码道歉,但是当我将其更改为上面的代码时,它仍然返回0?