【问题标题】:Adding element to list with Lambda Expression使用 Lambda 表达式将元素添加到列表
【发布时间】:2018-09-05 16:51:25
【问题描述】:

在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)));

}

但它返回错误,我不明白错误。

截图如下:

【问题讨论】:

  • 错误说明了什么?
  • 有点复杂,但你不能分配 ForEach,你正在存储过滤器,你不需要 add_tags var。
  • @Pranay Rana,绝对是的。我想第一次点击厚。但是网站说你不能在5分钟内接受。后来,我忘记了。很抱歉,再次非常感谢您。

标签: c# list linq lambda foreach


【解决方案1】:

如果你想要一个列表中所有选中的复选框标签,那么你可以这样做,现在你没有使用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; 
}

【讨论】:

  • Select 应该以 cap 开头。信
  • 选择 -> 选择
  • @Marc - 感谢更新了太多错别字......使用打字稿的效果......再次感谢
  • @MarkBenovsky - 感谢更新了太多错别字......使用打字稿的效果......再次感谢
【解决方案2】:

稍微修改一下你的代码,这一定行得通:

groupBox1.Controls.OfType<CheckBox>().Where(cb => 
cb.Checked).ToList().ForEach(cbx => filter.Add(Convert.ToInt32(cbx.Tag)));

不要将它分配给变量,因为ForEach(表达式链中最后调用的方法)不返回值,它只是做一些事情(Action)并且您已经添加到filter列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多