Jon*_*eet 142
你是否熟悉一般的代表?我有一个关于代表和事件的页面,如果没有,可能会有所帮助,尽管它更适合解释两者之间的差异.
Func<T, TResult>只是一个通用委托 - 通过在声明中用相应的类型参数(和)替换类型参数(T和TResult)来解决它在任何特定情况下的含义.我也重命名它以避免混淆:intstring
string ExpandedFunc(int x)
Run Code Online (Sandbox Code Playgroud)
换句话说,Func<int, string>是一个委托,它代表一个int参数并返回一个函数string.
Func<T, TResult>在LINQ中经常使用,用于投影和谓词(在后一种情况下,TResult总是如此bool).例如,您可以使用a Func<int, string>将整数序列投影到一系列字符串中.Lambda表达式通常在LINQ中用于创建相关的委托:
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);
}
Run Code Online (Sandbox Code Playgroud)
结果:
Value=3
Value=7
Value=10
Run Code Online (Sandbox Code Playgroud)
JP *_*oto 40
一个Func<int, string>吃整数,并返回字符串.那么,什么吃int并返回字符串?这个怎么样 ...
public string IntAsString( int i )
{
return i.ToString();
}
Run Code Online (Sandbox Code Playgroud)
在那里,我只是编写了一个吃int并返回字符串的函数.我该如何使用它?
var lst = new List<int>() { 1, 2, 3, 4, 5 };
string str = String.Empty;
foreach( int i in lst )
{
str += IntAsString(i);
}
// str will be "12345"
Run Code Online (Sandbox Code Playgroud)
我知道,这不是很性感,但这是一个很简单的想法,很多技巧是基于.现在,让我们使用Func代替.
Func<int, string> fnc = IntAsString;
foreach (int i in lst)
{
str += fnc(i);
}
// str will be "1234512345" assuming we have same str as before
Run Code Online (Sandbox Code Playgroud)
我没有在每个成员上调用IntAsString,而是创建了一个名为fnc的引用(这些对方法的引用称为委托)并改为使用它.(记住fnc吃掉int并返回字符串).
这个例子不是很性感,但是你会看到很多聪明的东西都是基于函数,委托和扩展方法的简单概念.
我见过的最好的引物之一就在这里.他有更多真实的例子.:)
And*_*are 27
它是一个委托,它将一个int作为参数并返回一个类型的值string.
以下是其用法示例:
using System;
class Program
{
static void Main()
{
Func<Int32, String> func = bar;
// now I have a delegate which
// I can invoke or pass to other
// methods.
func(1);
}
static String bar(Int32 value)
{
return value.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60570 次 |
| 最近记录: |