2010-10-26 148 views
2

我對新的Action/Func/Variance/CoVariance東西有點模糊,這可能是我需要的東西。通用參數委託?

我想要的是能夠將委託作爲參數傳遞給方法,該方法需要一個字符串並返回一個布爾值。問題是我不能使用類型化的委託或接口,因爲它將用於不共享庫的不同庫中,並且都會被第三個庫調用。

所以一般來說,我想通過它的輸入和返回類型來推斷委託。

所以它會是這樣:

delegate bool IncludeItemDelegate(string item); 

ClassA.FetchItems(int someParameter,includeItemDelegate); 
ClassB.FetchItems(int someParameter,string someOtherParam,includeItemDelegate); 

其中A和B份額犯規的庫,能不能做到?

回答

6

謂語是內置的,也標誌着意圖:

ClassA.FetchItems(int someParameter, Predicate<string> filter); 
+0

是的,這比Func 更好。 – Lunivore 2010-10-26 11:35:20

+0

啊,也許更深奧一點,但似乎適合 – Homde 2010-10-26 11:38:14

7

Func<string,bool>怎麼樣?

+1

啊,所以這是你如何使用它,這很容易,謝謝! :) – Homde 2010-10-26 11:31:52

0

它也可以通過謂詞作爲拉姆達

class A 
{ 
    static public IEnumerable<string> FetchItems(int max, Predicate<string> filter) 
    { 
     var l = new List<string>() {"test", "fest", "pest", "häst"}; 
     return l.FindAll(filter).Take(max); 
    } 
} 

這樣

var res = A.FetchItems(2, s => s.EndsWith("est")); 
+0

啊,這是一個不錯的獎金,謝謝 – Homde 2010-10-26 13:00:14