代码之家  ›  专栏  ›  技术社区  ›  Homde

通用参数委托?

  •  2
  • Homde  · 技术社区  · 15 年前

    我对新的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 回复  |  直到 15 年前
        1
  •  6
  •   Robert Jeppesen    15 年前

    谓词是内置的,也表示意图:

    ClassA.FetchItems(int someParameter, Predicate<string> filter);
    
        2
  •  7
  •   leppie    15 年前

    怎么样 Func<string,bool> ?

        3
  •  0
  •   Jonas Elfström    15 年前

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