如何在扩展方法中使用函数作为参数?

时间:2015-03-22 09:56:55

标签: c# extension-methods

我已经读过在扩展方法中建议使用函数而不是谓词,所以我试图这样做。

public static void Insert<T>(this ObservableCollection<T> paramOC, T NewElement, Func<T, T, bool> condition)
        {
            //code
        }

我试图以这种方式使用:

myOC.Insert(myNewElement, e=>e.Name.CompareTo(myNewElement.Name) > 0));

但是我收到一条错误,指出删除System.Func不带1个参数。

但是,如果我使用函数的谓词intead,它就可以工作。

我错过了什么?

非常感谢。

2 个答案:

答案 0 :(得分:3)

您需要Func<T,bool>(需要一个参数并返回bool),而不是Func<T,T,bool>

Predicate<T>有效,因为它接受一个参数并返回bool,因此它与 lambda表达式匹配。Func<T,T,bool>需要两个参数并返回bool,它不会#39; t与你的表达式匹配,因此错误。

答案 1 :(得分:1)

您的Func<T,T,bool>需要2个参数并返回bool

你有两个选择

  1. 正如Selman22所说,将其改为Func<T,bool>
  2. 将其称为(e1,e2) => ..