You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lambda表达式向List添加选中CheckBox的Tag值问题

问题分析与解决方案

你这段代码的问题在于,Where方法返回的是IEnumerable<CheckBox>类型的序列,而ForEach是List<T>独有的实例方法,不是LINQ的扩展方法,所以你不能直接在IEnumerable结果上调用ForEach,这会导致编译错误。

给你两种解决思路,都能实现你想要的效果:


方法一:转成List后使用ForEach

先把筛选后的CheckBox序列转成List<CheckBox>,再调用ForEach来添加Tag值:

private void button1_Click(object sender, EventArgs e) 
{
    List<int> filter = new List<int>();
    groupBox1.Controls.OfType<CheckBox>()
                     .Where(cb => cb.Checked)
                     .ToList() // 关键:把IEnumerable转成List
                     .ForEach(cbx => filter.Add(Convert.ToInt32(cbx.Tag)));
}

方法二:用LINQ直接生成List(更简洁推荐)

直接通过Select把选中的CheckBox的Tag转成int,再转成List,一步到位,代码更简洁也更符合LINQ的使用习惯:

private void button1_Click(object sender, EventArgs e) 
{
    List<int> filter = groupBox1.Controls.OfType<CheckBox>()
                                         .Where(cb => cb.Checked)
                                         .Select(cbx => Convert.ToInt32(cbx.Tag))
                                         .ToList();
}

这样就能正确把选中的CheckBox的Tag值(1、3、4)收集到filter列表里啦~

内容的提问来源于stack exchange,提问作者user1372430

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:18:48