内置委托类型:
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表达式可以兼容到表达式树类型。
本文介绍了C#中的内置委托类型Action和Func,并详细解释了匿名函数与Lambda表达式的用法及区别。通过示例展示了如何使用这些特性简化代码。
6137

被折叠的 条评论
为什么被折叠?



