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 方法。