C#单选按钮值(布尔值)到另一个类

本文关键字:另一个 布尔值 单选按钮 | 更新日期: 2023-09-27 18:21:48

我正在尝试将用户以单选按钮的形式选择的值发送到另一个进行计算的类。

在MainForm.cs中,我有这个:

private bool ReadInputBMR()
    { bla bla bla...
        if (rbtnFemale.Checked)  ;
        { calCalc.SetGender(2); }
        if (rbtnMale.Checked) ;
        { calCalc.SetGender(1); }
     bla bla 
}

在进行计算的类中,我有这样的:类名是: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;
}

我确信我在某个地方(或任何地方)搞砸了。其他值似乎在起作用——只是单选按钮中的值不起作用。

感谢您的帮助

C#单选按钮值(布尔值)到另一个类

可能的问题是,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 enum EGender{Unknown,Male,Female};

这将使您的代码更加清晰。如果不需要Unknown值,可以直接使用布尔值(如IsFemale),而不需要1和2值。

还要考虑像公共EGender Gender{get;set;}这样的属性,而不是单独的get和set方法。

您的代码应该是这样的

if (rbtnFemale.Checked==true)
{
    calCalc.SetGender(2);
}
else if (rbtnMale.Checked==true)
{
    calCalc.SetGender(1);
}