2010-10-26 98 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