你对代表大体熟悉吗?我有一个关于delegates and events的页面,如果不是这样的话可能会有帮助,尽管它更适合于解释两者之间的区别.
Func<T, TResult>
只是一个普通的委托——通过用声明中相应的type arguments(int
和string
)替换type parameters(T
和TResult
)来了解它在任何特定情况下的含义.为了避免混淆,我还将其重命名:
string ExpandedFunc(int x)
换句话说,Func<int, string>
是一个委托,它代表一个接受int
参数并返回string
的函数.
在LINQ中,Func<T, TResult>
经常用于投影和谓词(在后一种情况下,TResult
总是bool
).例如,可以使用Func<int, string>
将整数序列投影到字符串序列中.LINQ中通常使用Lambda expressions来创建相关代理:
Func<int, string> projection = x => "Value=" + x;
int[] values = { 3, 7, 10 };
var strings = values.Select(projection);
foreach (string s in strings)
{
Console.WriteLine(s);
}
结果:
Value=3
Value=7
Value=10