C# 单选按钮值(布尔值)到另一个 class
C# radiobutton value (boolean) to another class
我正在尝试让用户以单选按钮的形式选择值,并将其发送到另一个进行计算的 class。
在 MainForm.cs 我有这个:
private bool ReadInputBMR()
{ bla bla bla...
if (rbtnFemale.Checked) ;
{ calCalc.SetGender(2); }
if (rbtnMale.Checked) ;
{ calCalc.SetGender(1); }
bla bla
}
在进行计算的 class 中,我有这个:Class 名称是:CalorieCalculator.cs
public void SetGender(int value)
{
if (value > 2)
{ this.isFemale = false; }
else if (value == 2)
{ this.isFemale = true; }
}
public bool GetGender()
{
if (isFemale == true)
{
return isFemale == true;
}
else if (isFemale == false)
{
return isFemale == false;
}
}
public double CalcBasMetabolicRateBMR()
{
BMR = (10 * weight) + (6.25 * height) - (5 * age);
BMRFemale = BMR - 161;
BMRMale = BMR + 5;
if (isFemale == true)
return BMRFemale;
else
return BMRMale;
}
我很确定我在某处(或所有地方)搞砸了。其他值似乎有效,只是单选按钮中的值不起作用。
感谢您的帮助
你的代码应该是这样的
if (rbtnFemale.Checked==true)
{
calCalc.SetGender(2);
}
else if (rbtnMale.Checked==true)
{
calCalc.SetGender(1);
}
可能的问题是 SetGender() 被调用时值为 1 并且该实现没有执行任何操作,因为它检查 >= 2 和 == 2。
顺便说一句,为什么不通过更改使实施更容易(和平等):
public void SetGender(int value)
{
if (value > 2)
{ this.isFemale = false; }
else if (value == 2)
{ this.isFemale = true; }
}
至
public void SetGender(int value)
{
this.isFemale = (value == 2);
// Note: Since 1 is not handled this might be causing your problem
// In your example when value == 1, nothing happens.
}
改变
public bool GetGender()
{
if (isFemale == true)
{
return isFemale == true;
}
else if (isFemale == false)
{
return isFemale == false;
}
}
至
public bool GetGender()
{
return !isFemale;
}
改变
if (isFemale == true)
return BMRFemale;
else
return BMRMale;
至
return isFemale ? BMRFemale : BMRMale;
一般来说,将 1、2 等值用于枚举类型并不是一个好主意。
更好的是使用:
public 枚举 EGender { 未知,男性,女性};
这将使您的代码更加清晰。如果不需要 Unknown 值,可以直接使用布尔值(如 IsFemale ),而不需要 1 和 2 值。
还要考虑 public EGender Gender { get;放; } 而不是单独的 Get 和 Set 方法。
我正在尝试让用户以单选按钮的形式选择值,并将其发送到另一个进行计算的 class。
在 MainForm.cs 我有这个:
private bool ReadInputBMR()
{ bla bla bla...
if (rbtnFemale.Checked) ;
{ calCalc.SetGender(2); }
if (rbtnMale.Checked) ;
{ calCalc.SetGender(1); }
bla bla
}
在进行计算的 class 中,我有这个:Class 名称是:CalorieCalculator.cs
public void SetGender(int value)
{
if (value > 2)
{ this.isFemale = false; }
else if (value == 2)
{ this.isFemale = true; }
}
public bool GetGender()
{
if (isFemale == true)
{
return isFemale == true;
}
else if (isFemale == false)
{
return isFemale == false;
}
}
public double CalcBasMetabolicRateBMR()
{
BMR = (10 * weight) + (6.25 * height) - (5 * age);
BMRFemale = BMR - 161;
BMRMale = BMR + 5;
if (isFemale == true)
return BMRFemale;
else
return BMRMale;
}
我很确定我在某处(或所有地方)搞砸了。其他值似乎有效,只是单选按钮中的值不起作用。
感谢您的帮助
你的代码应该是这样的
if (rbtnFemale.Checked==true)
{
calCalc.SetGender(2);
}
else if (rbtnMale.Checked==true)
{
calCalc.SetGender(1);
}
可能的问题是 SetGender() 被调用时值为 1 并且该实现没有执行任何操作,因为它检查 >= 2 和 == 2。
顺便说一句,为什么不通过更改使实施更容易(和平等):
public void SetGender(int value)
{
if (value > 2)
{ this.isFemale = false; }
else if (value == 2)
{ this.isFemale = true; }
}
至
public void SetGender(int value)
{
this.isFemale = (value == 2);
// Note: Since 1 is not handled this might be causing your problem
// In your example when value == 1, nothing happens.
}
改变
public bool GetGender()
{
if (isFemale == true)
{
return isFemale == true;
}
else if (isFemale == false)
{
return isFemale == false;
}
}
至
public bool GetGender()
{
return !isFemale;
}
改变
if (isFemale == true)
return BMRFemale;
else
return BMRMale;
至
return isFemale ? BMRFemale : BMRMale;
一般来说,将 1、2 等值用于枚举类型并不是一个好主意。
更好的是使用:
public 枚举 EGender { 未知,男性,女性};
这将使您的代码更加清晰。如果不需要 Unknown 值,可以直接使用布尔值(如 IsFemale ),而不需要 1 和 2 值。
还要考虑 public EGender Gender { get;放; } 而不是单独的 Get 和 Set 方法。