在groupBox控件中,有四个checkBox元素,它们的标签名称为1,2,3,4。选中checkBox1,checkBox3和checkBox4。这是截图:
我想将选定的复选框项标记添加到列表项。 我试过这样:
private void button1_Click(object sender, EventArgs e)
{
List<int> filter = new List<int>();
var add_tags = groupBox1.Controls.OfType<CheckBox>().Where(cb => cb.Checked).ForEach(cbx => filter.Add(Convert.ToInt32(cbx.Tag)));
}
但它返回错误,我不明白错误。
以下是截图:
答案 0 :(得分:3)
如果你想在列表中选择所有选中的复选框标签,那么你可以这样做,现在你没有使用Select
以外的功能
List<int> filter = groupBox1.Controls.OfType<CheckBox>()
.Where(cb => cb.Checked)
.Select(cbx => Convert.ToInt32(cbx.Tag))
.ToList();
假设所有标签都是int。
如果你想避免任何与错误相关的解析,你可以试试这个
List<int> filter = groupBox1.Controls.OfType<CheckBox>()
.Where(cb => cb.Checked)
.Select(cbx => parseTag(cbx.Tag.toString()))
.ToList();
private int parseTag(string tag)
{
int num;
if (!Int32.TryParse(tag, out num))
{
num = int.MaxValue; // or int.MinValue - however it should show up in sort
}
return num;
}
答案 1 :(得分:1)
稍微修改你的代码,这必须有效:
groupBox1.Controls.OfType<CheckBox>().Where(cb =>
cb.Checked).ToList().ForEach(cbx => filter.Add(Convert.ToInt32(cbx.Tag)));
不要将它分配给变量ForEach
(表达式链中最后一个被调用的方法)不返回值,它只是做某事(Action
)和您已添加到filter
列表。