【发布时间】:2010-11-02 14:01:37
【问题描述】:
我刚刚将我的项目升级到 .NET 3.5,并认为我可以完美地使用 LINQ。我的应用程序有一个窗口管理器,它在运行时跟踪打开的窗口,我正在尝试添加一个 FindOpenWindows 通用方法。到目前为止我做了什么:
List<Form> openWindows;
public List<T> FindOpenWindows<T>(Predicate<T> constraint)
{
var foundTs = from form in openWindows
where constraint(form)
&& form.Created
select form;
return foundTs as List<T>;
}
但我得到“Delegate System.Predicate 有一些无效参数”。于是我把方法改写为:
public List<T> FindOpenWindows<T>(Predicate<Form> constraint)
{
var foundTs = from form in openWindows
where constraint(form as Form)
&& form.Created
select form;
return foundTs as List<T>;
}
我没有将函数设为非泛型的原因是为了让调用者获得一个列表,其中包含他们正在寻找的窗口类型。
由于我是 LINQ 和 Lambda 表达式的新手,我不确定如何在 FindOpenWindows 调用中为谓词编写代码。我显然需要能够验证传入的表单不为空,并且我需要能够检查它是否与我正在寻找的类型匹配。
【问题讨论】:
标签: c# visual-studio-2008 linq .net-3.5 lambda