【问题标题】:Using lambda function in a foreach over controls [duplicate]在控制的foreach中使用lambda函数[重复]
【发布时间】:2017-11-08 12:38:58
【问题描述】:

我想翻译一下:

foreach(Control c in Controls)
{
    if(c is TextBox)
    {
        // ...
    }
}

进入:

foreach(Control c => (c is TextBox) in Controls)
{
    // ...
}

具体如何使用 lambda 函数来完成?

【问题讨论】:

  • 那么,基本上,你想要所有的控件都是文本框吗?
  • @Jerodev 基本上是的
  • @PatricHofman 这不是重复的,因为问题本身包含假定的重复答案,真正的问题不是如何获取所有文本框,而是如何翻译这个循环
  • @Ernis 有时投票最多的答案是 "Answer"
  • @Ernis 下面给出的答案正是副本中给出的答案,所以复制是可以的。

标签: c# .net winforms linq lambda


【解决方案1】:

使用OfType:

foreach (TextBox c in Controls.OfType<TextBox>())
{

}

它根据指定的类型过滤 IEnumerable 的元素。

别忘了先将LINQ 添加到您的using 指令中:

using System.Linq;

【讨论】:

    【解决方案2】:

    参考 Linq:

    using System.Linq;
    

    然后使用这个:

    foreach (var control in Controls.Cast<Control>().Where(c => c is TextBox))
    {
        // ...
    }
    

    【讨论】:

    • 'Control.ControlCollection' 不包含 'Where' 的定义,我该如何解决?
    • 这个答案无效。它不起作用。
    • 不,没有Where,因为Controls 没有实现IEnumerable&lt;T&gt;
    • 只需使用OfType。它让你免去了很多不必要的电话@Donnoh
    • 感谢修复
    【解决方案3】:

    你正在寻找这样的东西:

    foreach(TextBox ctrlTxtBox in Controls.OfType<TextBox>())
    {
       // Got it code here
    }
    

    OfType 根据指定类型过滤 IEnumerable 的元素。

    【讨论】:

    • 太晚了.......
    • @PatrickHofman:是的,这就是为什么我保留这个名字..!在发帖前接到电话。
    • 没有理由拒绝投票。如果是的话,在这个网站上会有很多需要投票的答案。
    • @un-lucky 你是一个很好的回答者。检查你的声誉。你的回答也是正确的。 +1。
    • @juharr:这总是取决于个人的决定,有时你可能会为重复的问题获得 10 多票,这完全取决于
    猜你喜欢
    • 2014-08-14
    • 2019-05-02
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2021-03-25
    相关资源
    最近更新 更多