Leo*_* Vo 7 .net c# lambda delegates
在.NET 4.0中,有一个内置的委托方法:
public delegate TResult Func<in T, out TResult>(T arg);
Run Code Online (Sandbox Code Playgroud)
它用于LINQ extesion方法,例如:
IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
Run Code Online (Sandbox Code Playgroud)
我不清楚Func委托,为什么以下lambda表达式匹配它:
// p is a XElement object
p=>p.Element("firstname").Value.StartsWith("Q")
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 12
Func<T,TResult>简单地表示:接受a T作为参数的方法,并返回一个TResult.你的lambda匹配它,因为T=XElement和TResult=bool,你的lambda取a T并返回a TResult.在该特定情况下,它通常被称为谓词.编译器可以根据许多(并非所有)场景中的用法推断泛型类型参数(T和TResult).
注意in并out参考方法的(co | contra) - 方差行为 - 不是正常使用out(即out这里不代表 by-ref,不假设在呼叫时分配,需要在退出前分配) .
Func<T,TResult>采用两个通用参数:T和TResult.如您所见,T是arg参数TResult的类型,是返回类型,因此是您的代码
// p is a XElement object
p=>p.Element("firstname").Value.StartsWith("Q")
Run Code Online (Sandbox Code Playgroud)
将是有效的Func<XElement, bool>.
| 归档时间: |
|
| 查看次数: |
776 次 |
| 最近记录: |