想知道如何轻松地从复选框中添加总和

wanting to know how to easily add sums from a checkbox

我对 C# 非常陌生,所以我在解决以下问题时遇到了一些困难。

下面是我的后续代码

int access = 1;
int onlineVideos = 2;
int personalTrainer = 20;
int dietConsultation = 20;

int extras = 0;

if (checkBox1.Checked)
{
    extras += access;
}
else if (checkBox2.Checked)
{
    extras += onlineVideos;
}
else if (checkBox3.Checked)
{
    extras += personalTrainer;
}
else if (checkBox4.Checked)
{
    extras += dietConsultation;
}

textBox6.Text = extras.ToString();

我希望能够轻松地添加所有选中的框的总和,然后将它们打印到文本框。

根据您的描述,您不需要多个 if/else 子句,而只需要一个方法,该方法将选中状态的复选框的所有值相加。像这样:

foreach (Control c in this.Controls)
{
    if((c is CheckBox) && ((CheckBox) c).Checked)
      {
        yourdecimal += Convert.ToDecimal(c.Text); 
      }                
}

具体方法取决于您的具体代码,因此可能需要更改“this.Controls”作为示例。或者可能需要添加 try/catch 以防止出现非数值等问题。这只是一种方法。如果您需要进一步的帮助,请添加您的源代码。

您可以借助三元运算符稍微简化代码:

int extras = (checkBox1.Checked ? 0 : access) + 
             (checkBox2.Checked ? 0 : onLineVideos) + 
             (checkBox3.Checked ? 0 : personalTrainer) + 
             (checkBox4.Checked ? 0 : dietConsultation);

更好的选择是分离数据(期权价格)和逻辑:

using System.Linq;

...

// Data: option and its price
var prices = new (CheckBox option, int price)[] {
  (checkBox1,  1),
  (checkBox2,  2),
  (checkBox3, 20),
  (checkBox4, 20),
};

...

// Logic: we sum all checked options
var extras = prices.Sum(item => item.option.Checked ? item.price : 0);

作为@jonas-metzler 解决方案的替代方案,您可以在复选框及其值之间创建 sort-of 映射 table (Dictionary)。如果您在 Checkbox 上使用 Text 属性 来解决其他问题,或者作为解决 WinForms 之外的类似问题的更 general-purpose 解决方案,则可以使用它。

var checkboxValues = new Dictionary<Checkbox, int>
{
    { checkBox1, access },
    { checkBox2, onlineVideos },
    { checkBox3, personalTrainer },
    { checkBox4, dietConsultation },
};

var sum = checkboxValues.Where(kvPair => kvPair.Key.Checked)
    .Sum(kvPair => kvPair.Value);