Func的解释
我想知道是否有人可以解释什么Func<int, string>
是,以及如何使用一些明确的例子。
你是否熟悉一般的代表? 我有一个关于代表和事件的网页,如果没有,可能会有所帮助,虽然它更适合于解释两者之间的差异。
Func<T, TResult>
只是一个通用的委托 – 通过在声明中用相应的types参数 ( int
和string
)replacetypes参数 ( T
和TResult
),找出在任何特定情况下的含义。 我也改名为了避免混淆:
string ExpandedFunc(int x)
换句话说, Func<int, string>
是一个委托,它表示一个接受int
参数并返回一个string
的函数。
Func<T, TResult>
通常在LINQ中用于投影和谓词(在后一种情况下, TResult
始终是bool
)。 例如,您可以使用Func<int, string>
将一系列整数投影到一系列string中。 Lambdaexpression式通常用于LINQ来创build相关代表:
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
Func<int, string>
吃ints并返回string。 那么,什么吃镶嵌和返回string? 这个怎么样 …
public string IntAsString( int i ) { return i.ToString(); }
在那里,我刚刚构build了一个函数,它可以进行整数并返回string。 我将如何使用它?
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"
我知道不是很性感,但是这是很多技巧的基础。 现在,我们来使用一个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
我没有在每个成员上调用IntAsString,而是创build了一个名为fnc的引用(这些对方法的引用被称为委托 ),并用它来代替。 (记住fnc吃ints和返回string)。
这个例子不是很性感,但是你会看到很多聪明的东西是基于函数,委托和扩展方法的简单思想。
在这个东西我见过的最好的引物之一是在这里 。 他有更多的实例。 🙂
它是一个委托,它将一个int
作为参数并返回一个string
types的值。
这是一个用法的例子:
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(); } }