C#中内置的泛型委托Func与Action
简介
从C# 3.0起很少需要自己声明委托。System.Func 是一个泛型委托,它可以表示带有返回值的方法。它可以接受一个到多个输入参数,并返回一个指定类型的结果。System.Func 委托的最后一个类型参数表示方法的返回值类型。而System.Action系列代表返回void的方法。
Func委托
说明
Func委托有很多种形式,如下所示:
这里以Func为例说明该委托的用法。
原型如下所示:
public delegate TResult Func<in T,out TResult>(T arg);结合前面文章委托(一)中对于委托类型的图解:
那么这个内置泛型委托的图解如下:
示例
依据前面的文章委托(一)中使用委托的步骤来说明这个内置泛型委托的用法:
由于这个是内置的泛型委托,包含在System.Runtime.dll程序集中,不是自定义的委托类型,因此不需要自己声明这个委托类型,而是声明这个泛型委托变量:
Func<string, string> selector;然后创建委托实例,并添加第一个方法:
selector= str => str.ToUpper();这里使用了lambda表达式,以后再进行解释。这里将声明委托变量与实例化分开了,一般可以将这两个步骤合并,如下所示:
Func<string, string> selector = str => str.ToUpper();这个委托对象的图解如下所示:
调用这个委托对象:
string[] words = { "orange", "apple", "Article", "elephant" };<br> <br> IEnumerable<String> aWords = words.Select(selector);<br> <br> foreach (String word in aWords)<br> Console.WriteLine(word);结果如下所示:
其实也可以直接在select中直接写一个lambda表达式,这种方式更常见:
string[] words = { "orange", "apple", "Article", "elephant" };<br> <br>IEnumerable<String> aWords = words.Select(x => x.ToUpper());<br><br> foreach (String word in aWords)<br> Console.WriteLine(word);输出结果如下所示:
其实是一样的。
查看select方法说明:
它的参数类型就是一个参数类型为string返回值类型为string的内置func委托类型。
Lambda表达式的类型是由编译器隐式推断的,它通常表示为委托类型或表达式树类型,具体取决于上下文。最常见的用法是将Lambda表达式赋值给委托类型或传递给接受委托类型参数的方法。
以上就是C#中的内置泛型委托func的介绍与用法示例,希望对你有所帮助。
Action委托
Action委托也有很多形式,如下所示:
本文以Action这种形式来说明C#中内置的泛型Action委托的用法。
该委托类型的原型如下所示:
public delegate void Action<in T>(T obj);它的图解如下所示:
示例
声明委托类型的变量:
Action<string> action;实例化该委托变量,即为委托添加方法:
void showMessage(string message)<br>{<br> Console.WriteLine(message);<br>}<br>action = showMessage;但是一般可以合为一步:
Action<string> action = showMessage;<br><br>void showMessage(string message)<br>{<br> Console.WriteLine(message);<br>} 调用委托:
string[] words = { "orange", "apple", "Article", "elephant" };<br>foreach(var word in words) <br>{ <br> action(word);<br>}输出结果如下所示:
但是可以发现我们的代码写的还不构简洁,用到了另外声明的方法,其实可以用Lambda表达式来写方法,不需要自己另外写:
static void Main(string[] args)<br> {<br> Action<string> action = (x) => <br> {<br> Console.WriteLine(x);<br> };<br> <br> string[] words = { "orange", "apple", "Article", "elephant" };<br> foreach(var word in words) <br> { <br> action(word);<br> }<br> }输出结果如下所示:
以上就是C#中的内置泛型委托Action的介绍与用法示例,希望对你有所帮助。
ref
Action Delegate (System) | Microsoft Learn
Func Delegate (System) | Microsoft Learn
来源:https://www.cnblogs.com/mingupupu/archive/2023/12/04/17876044.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页:
[1]