如何在扩展方法中使用函数作为参数?
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
你有两个选择
- 如 Selman 22 所说,将其更改为
Func<T,bool>
- 称其为
(e1,e2) => ..
我读到建议在扩展方法中使用函数而不是谓词,所以我正在尝试这样做。
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
你有两个选择
- 如 Selman 22 所说,将其更改为
Func<T,bool>
- 称其为
(e1,e2) => ..