在.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=XElementTResult=bool ,你的 lambda 需要一个 T 并返回一个 TResult 。在那种特殊情况下,它通常被称为谓词。编译器可以根据在许多(并非所有)场景中的使用情况推断泛型类型参数( TTResult )。

注意 inout 指的是方法的 (co|contra)-variance 行为 - 不是 out 的正常用法(即 out 此处 不是 意思是 by-ref,不假定在调用时分配,并且需要在退出前分配)。

关于c# - 请说明有关.NET 4.0中的Func委托(delegate)的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7963837/

10-09 21:23