在.NET 4.0中,有一个内置的委托(delegate)方法:
public delegate TResult Func<in T, out TResult>(T arg);
它用于LINQ淘汰方法中,例如:
IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
我不太了解Func委托(delegate),为什么以下lambda表达式与之匹配:
// p is a XElement object
p=>p.Element("firstname").Value.StartsWith("Q")
最佳答案
Func<T,TResult>
简单的意思是:一个接受 T
作为参数并返回一个 TResult
的方法。你的 lambda 匹配它,因为对于 T=XElement
和 TResult=bool
,你的 lambda 需要一个 T
并返回一个 TResult
。在那种特殊情况下,它通常被称为谓词。编译器可以根据在许多(并非所有)场景中的使用情况推断泛型类型参数( T
和 TResult
)。
注意 in
和 out
指的是方法的 (co|contra)-variance 行为 - 不是 out
的正常用法(即 out
此处 不是 意思是 by-ref,不假定在调用时分配,并且需要在退出前分配)。
关于c# - 请说明有关.NET 4.0中的Func委托(delegate)的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7963837/