Linq无法在循环中过滤元素

时间:2014-02-25 10:07:47

标签: c# winforms linq

我想在循环每个之前过滤集合元素。

当我尝试这个时:

foreach (CheckBox checkbox in this.Controls()
        .Where(c => c.GetType() == typeof (CheckBox)).Select(c => (CheckBox)c))

我收到以下错误:

"System.Windows.Forms.Controls cannot be used like a method."

我使用.NET framework 4客户端配置文件,并确保在代码中使用System.Linq

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

this.Controls是属性,而不是方法,因此您应该使用它而不使用括号()

foreach (CheckBox checkbox in this.Controls
        .Where(c => c.GetType() == typeof (CheckBox)).Select(c => (CheckBox)c))

修改:根据您的评论,这不起作用。你可以使用的是以下代码:

foreach (var control in this.Controls)
{
    CheckBox myCheckbox = control as CheckBox;
    if (myCheckbox == null) continue;

    // your code
}

但我也更喜欢dkozi的解决方案。

答案 1 :(得分:3)

Controls属性不是方法,您也可以使用Enumerable.OfType<TResult>方法更轻松地执行此操作:

foreach (CheckBox checkbox in this.Controls.OfType<CheckBox>())
{
}