0
我剛將項目升級到.NET 3.5,並認爲我對LINQ有完美的使用。我的應用程序有一個窗口管理器,在運行時跟蹤打開的窗口,我試圖添加一個FindOpenWindows通用方法。我到目前爲止所做的:帶有泛型謂詞約束的LINQ
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>;
}
但我得到「委託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時爲謂詞編寫代碼。我顯然需要能夠驗證被傳入的表單不是空的,我需要能夠檢查它是否與我正在尋找的類型相匹配。
謝謝,這完美的作品!我能夠弄清楚這個電話應該是: List mainWindows = Program.windowManager.FindOpenWindows ((Form f)=> f is frmMain); –
jasonh
2009-06-12 19:45:54