通用参数委托?

时间:2010-10-26 11:25:43

标签: c# delegates covariance variance

我对新的Action / Func / Variance / CoVariance的东西有点模糊,这可能是我需要的。

我想要的是能够将委托作为参数传递给方法,该方法接受一个字符串并返回一个bool。问题是我不能使用类型化的委托或接口,因为它将在不共享库的不同库中使用,并且两者都将被第三个调用。

因此,一般来说,我希望通过它的输入和返回类型来推断委托。

所以它会像:

delegate bool IncludeItemDelegate(string item);

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

如果A和B不共享任何库,可以这样做吗?

3 个答案:

答案 0 :(得分:7)

Func<string,bool>怎么样?

答案 1 :(得分:6)

Predicate是内置的,也表示意图:

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

答案 2 :(得分:0)

也可以将谓词作为lambda传递

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"));