想知道如何轻松地从复选框中添加总和
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);
我对 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);