C# 泛型参数委托?

C# 泛型参数委托?,c#,delegates,covariance,variance,C#,Delegates,Covariance,Variance,我对新的Action/Func/Variance/convariance有些模糊,这可能就是我需要的 我想要的是能够将委托作为参数传递给方法,该方法接受字符串并返回bool。问题是我不能使用类型化委托或接口,因为它将在不共享库的不同库中使用,并且这两个库都将由第三方调用 因此,一般来说,我希望通过委托的输入和返回类型来推断委托 所以它会像: delegate bool IncludeItemDelegate(string item); ClassA.FetchItems(int somePar

我对新的Action/Func/Variance/convariance有些模糊,这可能就是我需要的

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

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

所以它会像:

delegate bool IncludeItemDelegate(string item);

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

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

那么
Func
如何?

谓词是内置的,并且还表示意图:

ClassA.FetchItems(int someParameter, Predicate<string> filter);
ClassA.FetchItems(int-someParameter,谓词过滤器);

也可以将谓词作为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);
    }
}

是的,这比Func好。啊,也许有点深奥,但似乎合适
var res = A.FetchItems(2, s => s.EndsWith("est"));