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

how to use a function as parameter in extension method?

我读到建议在扩展方法中使用函数而不是谓词,所以我正在尝试这样做。

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 个参数。

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

我错过了什么?

非常感谢。

您需要 Func<T,bool>(它接受一个参数和 returns bool),而不是 Func<T,T,bool>

Predicate<T> 有效是因为它接受一个参数和 returns bool,所以它与 lambda 表达式.[=12= 匹配] 需要两个参数和 returns 布尔值,它与您的表达式不匹配,因此出现错误。

你的 Func<T,T,bool> 需要 2 个参数和 returns bool

你有两个选择

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