Lamda表达式本质就是匿名方法的简写形式
通过反编译:我们知道其实Lamda表达式就是匿名方法的“简化机制”
c#类似的机制还有:
1)foreach是for的简化
2)switch是if...elseif...的简化
3)三元运算符是if...else的简化
Lamda表达式,比匿名方法简化了如下步骤:
减少了delegate关键字,以及参数的类型。
从C#3.0开始代替“匿名方法”的写法。
Lamda的简化性质如下:
1)当“方法体”只有一句的时候,可以不写大括号,不加return。
2)当方法体只有一个的时候,可以不写括号
Lamda表达式可以访问表达式之外的变量。(不推荐)
源代码:
/***
*lamda表达式是匿名方法的再简化
* 符号:=>
* 1.去掉delegate关键字,增加"=>"符号
* 2.可以去掉参数的类型定义
* 3.如果方法体只有一条语句,则可以去掉大括号与return关键字
* 4.方法中只有一个参数,参数的小括号可以去掉
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace chapter27lamda表达式
{
class Program
{
public void Test1()
{
//匿名方法
Func<int, int, int> funAddingHandler1 = delegate(int num1, int num2)
{
return num1 + num2;
};
//Lamda表达式
Func<int, int, int> funAddingHandler2 = (int num1, int num2)=>
{
return num1 + num2;
};
//Lamda表达式,去掉参数类型
Func<int, int, int> funAddingHandler3 = (num1, num2) =>
{
return num1 + num2;
};
//Lamda表达式,去掉参数类型,去掉大括号、去掉return(方法体只有一句)
Func<int, int, int> funAddingHandler4 = (num1, num2) => num1 + num2;
//Lamda表达式,如果只有一个参数,参数的小括号可以去掉
Func<int, int> funAddingHandler5 = (num1) => num1 + 8;
Func<int, int> funAddingHandler6 = num1 => num1 + 8;
//Lamda表达式,没有参数
Func<int> funAddingHandler7 = () => 8;
//测试
Console.WriteLine(funAddingHandler1(1,20));
Console.WriteLine(funAddingHandler2(2,67));
Console.WriteLine(funAddingHandler3(200, 67));
Console.WriteLine(funAddingHandler4(298, 67));
Console.WriteLine(funAddingHandler5(67));
Console.WriteLine(funAddingHandler6(697));
Console.WriteLine(funAddingHandler7());
}
/// <summary>
/// lamda表达式使用外部变量
/// </summary>
public void Test2()
{
int num = 100;
Func<int, int> funHandler = x => x + num;
Console.WriteLine(funHandler(99));
}
static void Main(string[] args)
{
Program obj = new Program();
// obj.Test1();
obj.Test2();
}
}
}