Lambda 表达式
Ch 01 Intro
在了解Lambda表达式
之前,先来了解一下委托
、匿名方法
。
Ch 02 委托(delegate)
- 是存有对
某个方法的引用
(方法名
)的一种引用类型变量
,应用可以在运行时
被改变
。 - 是
C#
实现回调函数
的一种机制。 - 用于引用与其具有
相同标签
(返回值、参数列表
)的方法。
eg.
using System;
//01 创建一个委托
delegate int Mydelegate(int num1, int num2);
namespace Lambda
{
class DelegateDemo
{
static void Main(string [] args)
{
//02 委托实例化——调用静态方法
Mydelegate mydelegate = new Mydelegate(Add);
//03 调用
Console.WriteLine(mydelegate(7, 11));
//委托实例化——调用实例方法
DelegateDemo delegateDemo = new DelegateDemo();
mydelegate = new Mydelegate(delegateDemo.Mul);
//调用
Console.WriteLine(mydelegate(6, 3));
}
static int Add(int n1, int n2)
{
return n1 + n2;
}
int Mul(int n1, int n2)
{
return n1 * n2;
}
}
}
Ch 03 匿名方法(Anonymous methods)
- 委托是通过
传递函数引用
进行委托的技术,而匿名方法则是传递代码块
作为委托参数的技术。 - 匿名方法是没有名称,只有主体的方法。
- 在匿名方法中不需要指定返回值,由方法主体中的
return
语句进行推断。
eg.
using System;
//创建委托
delegate int Mydelegate(int n1, int n2);
namespace Lambda
{
class DelegateDemo
{
static void Main(string [] args)
{
//委托匿名方法
Mydelegate md = delegate (int n1, int n2)
{
return n1 + n2;
};
Console.WriteLine(md(3, 8));
//委托静态方法
md = new Mydelegate(Add);
Console.WriteLine(md(3, 8));
//委托实例方法
md = new Mydelegate((new DelegateDemo()).Mul);
Console.WriteLine(md(3,8));
}
static int Add(int n1, int n2)
{
return n1 + n2;
}
int Mul(int n1, int n2)
{
return n1 * n2;
}
}
}
Ch 04 Lambda表达式
4.1 =>
运算符
Lambda
运算符输入参数 => 表达式
输入参数 => 语句块
- 表达式主体定义:表示
return
的缩写
4.2 Lambda
类似鱼函数式编程。
eg.
using System;
//创建
delegate int Mydelegate(int n1, int n2);
namespace Lambda
{
class DelegateDemo
{
static void Main(string [] args)
{
//使用lambda表达式
Mydelegate md = (x, y) => x + y;
Console.WriteLine(md(10, 7));
}
}
}
4.3 Func<T, TResult>
委托
带返回值的泛型类型的委托。
//Func委托 最后一个参数是返回值类型
Func<int, int, int, int> md = (x, y, z) => x * y * z;
Console.WriteLine(md(1,2,3));
4.4 Action<T1, T2>
委托
不带返回值。
Action<int, int, int> ac = (x, y, z) =>
{
Console.WriteLine(x + y + z);
};
ac(2,4,6);
4.5 表达式树
待更