C#中内置的泛型委托Func与Action


风晓
风晓 2023-12-29 11:19:10 48992 赞同 0 反对 0
分类: 资源
本文主要讲了C#中内置的泛型委托Func与Action

简介

从C# 3.0起很少需要自己声明委托。System.Func 是一个泛型委托,它可以表示带有返回值的方法。它可以接受一个到多个输入参数,并返回一个指定类型的结果。System.Func 委托的最后一个类型参数表示方法的返回值类型。而System.Action系列代表返回void的方法。

Func委托

说明

Func委托有很多种形式,如下所示:

image-20231204102101852

这里以Func<T,TResult>为例说明该委托的用法。

原型如下所示:

public delegate TResult Func<in T,out TResult>(T arg);

结合前面文章委托(一)中对于委托类型的图解:

image-20231204102840797

那么这个内置泛型委托的图解如下:

image-20231204103628924

示例

依据前面的文章委托(一)中使用委托的步骤来说明这个内置泛型委托的用法:

image-20231204104212396

由于这个是内置的泛型委托,包含在System.Runtime.dll程序集中,不是自定义的委托类型,因此不需要自己声明这个委托类型,而是声明这个泛型委托变量:

Func<string, string> selector;

然后创建委托实例,并添加第一个方法:

 selector= str => str.ToUpper();

这里使用了lambda表达式,以后再进行解释。这里将声明委托变量与实例化分开了,一般可以将这两个步骤合并,如下所示:

 Func<string, string> selector = str => str.ToUpper();

这个委托对象的图解如下所示:

image-20231204105435571

调用这个委托对象:

 string[] words = { "orange", "apple", "Article", "elephant" };
 
IEnumerable<String> aWords = words.Select(selector);

 foreach (String word in aWords)
    Console.WriteLine(word);

结果如下所示:

image-20231204105821302

其实也可以直接在select中直接写一个lambda表达式,这种方式更常见:

string[] words = { "orange", "apple", "Article", "elephant" };
 
IEnumerable<String> aWords = words.Select(x => x.ToUpper());

foreach (String word in aWords)
   Console.WriteLine(word);

输出结果如下所示:

image-20231204110124627

其实是一样的。

查看select方法说明:

image-20231204110332929

它的参数类型就是一个参数类型为string返回值类型为string的内置func委托类型。

Lambda表达式的类型是由编译器隐式推断的,它通常表示为委托类型或表达式树类型,具体取决于上下文。最常见的用法是将Lambda表达式赋值给委托类型或传递给接受委托类型参数的方法。

以上就是C#中的内置泛型委托func的介绍与用法示例,希望对你有所帮助。

Action委托

Action委托也有很多形式,如下所示:

image-20231204144408398

本文以Action<T>这种形式来说明C#中内置的泛型Action委托的用法。

该委托类型的原型如下所示:

public delegate void Action<in T>(T obj);

它的图解如下所示:

image-20231204144848357

示例

声明委托类型的变量:

Action<string> action;

实例化该委托变量,即为委托添加方法:

void showMessage(string message)
{
   Console.WriteLine(message);
}
action = showMessage;

但是一般可以合为一步:

Action<string> action = showMessage;

void showMessage(string message)
{
   Console.WriteLine(message);
}        

调用委托:

string[] words = { "orange", "apple", "Article", "elephant" };
foreach(var word in words)
{
   action(word);
}

输出结果如下所示:

image-20231204150654969

但是可以发现我们的代码写的还不构简洁,用到了另外声明的方法,其实可以用Lambda表达式来写方法,不需要自己另外写:

 static void Main(string[] args)
{
    Action<string> action = (x) =>
    {
        Console.WriteLine(x);
    };
         
    string[] words = { "orange", "apple", "Article", "elephant" };
    foreach(var word in words)
    {
        action(word);
    }
}

输出结果如下所示:

image-20231204151506648

以上就是C#中的内置泛型委托Action的介绍与用法示例,希望对你有所帮助。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  130
统信桌面专业版【全盘安装UOS系统】介绍  129
银河麒麟桌面操作系统安装佳能打印机驱动方法  120
银河麒麟桌面操作系统 V10-SP1用户密码修改  108
麒麟系统连接打印机常见问题及解决方法  30
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!