Func的解释

我想知道是否有人可以解释什么Func<int, string>是,以及如何使用一些明确的例子。

你是否熟悉一般的代表? 我有一个关于代表和事件的网页,如果没有,可能会有所帮助,虽然它更适合于解释两者之间的差异。

Func<T, TResult>只是一个通用的委托 – 通过在声明中用相应的types参数intstring )replacetypes参数TTResult ),找出在任何特定情况下的含义。 我也改名为了避免混淆:

 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作为参数并返回一个stringtypes的值。

这是一个用法的例子:

 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(); } }