C#内置委托,匿名函数和Lambda

本文介绍了C#中的内置委托类型Action和Func,并详细解释了匿名函数与Lambda表达式的用法及区别。通过示例展示了如何使用这些特性简化代码。

内置委托类型:

Action:表示无返回值类型无参数列表的委托public delegate void Action();

Action<>:表示无返回值类型,有参数列表的委托public deleaget void Action<in T>()

...

以上这个委托类型重载了16个,所以最多可以表示参数列表为16的委托;

 

Func<out TResult>表示有返回值没有参数列表的委托public delegate TResult Func<out TResult>();

 

Func<in T,out TResult>表示有返回值也有参数列表的委托public delegate TResult Func<in T, out TResult>(T arg);

...

以上的委托重载了16个,参数列表最多可以表示16的委托;

 

匿名函数:

匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用简称为:没有函数名的函数;

 

public static void Move(){} 

public static void Main(){

Action act=new Action(Move); //创建一个委托变量,添加一个方法引用

Action act1=delegate(){

Console.WriteLine("我是一个匿名函数");

};

}


lambda表达式

自从C#3.0开始,就可以使用一种新语法把实现代码赋予委托:

Lambda表达式。只要有委托参数类型的地方,就可以使用Lambda 达式

lambda表达式是匿名函数的简化版

使用匿名方法的地方可以使用Lambda表达式来代替,例如: 

Func< string,string > = delagate(string para)

{

para += "Hello World!";

return param;

};

可以写成

Func< string,string > = para=>

{

para +="Hello World!"; return para;

};

一些匿名函数的示例

x => x + 1 //隐式的类型化,函数体为表达式

x => {return x + 1;} //隐式的类型化,函数体为代码块(int x) => x + 1 //显式的类型化,函数体为表达式

(int x) => {return x + 1;} //显式的类型化,函数体为代码块(x , y) => x * y //多参数

() => Console.WriteLine() //无参数

async (t1 , t2) => await t1 + await t2 //异步delegate (int x) {return x + 1;} //匿名函数方法表达式delegate {return 1 + 1;} //参数列表省略

 

Lambda表达式和匿名方法表达式的区别:

● 当没有参数的时候,匿名方法表达式允许完全省略参数列表,从而可以转换为具有任意值参数列表的委托类型,Lambda表达式则不能省略参数列表的圆括号()。

● Lambda表达式允许省略和推断类型参数,而匿名方法表达式要求显式声明参数类型。

● Lambda表达式主体可以为表达式或者代码块,而匿名方法表达式的主体必须为代码块。

只有Lambda表达式可以兼容到表达式树类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值