在.NET 4.0中,有一个内置的委托方法:
public delegate TResult Func<in T, out TResult>(T arg);
它用于LINQ extesion方法,例如:
IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
我不清楚Func委托,为什么以下lambda表达式匹配它:
// p is a XElement object
p=>p.Element("firstname").Value.StartsWith("Q")
答案 0 :(得分:12)
Func<T,TResult>
仅表示:接受T
作为参数的方法,并返回TResult
。你的lambda与之匹配,对于T=XElement
和TResult=bool
,你的lambda取T
并返回TResult
。在那个特定的情况下,它通常被称为谓词。编译器可以根据许多(并非所有)场景中的用法推断泛型类型参数(T
和TResult
)。
注意in
和out
是指方法的(共|) - 方差行为 - 而不是out
的正常用法(即out
此处不表示by-ref,不假设在通话时分配,需要在退出前分配。)
答案 1 :(得分:5)