Lambda学习
public class LambdaTest
{
public delegate void noreturnnopara();
public delegate void noreturnWithPara(int id, string name);
public delegate int WithReturnWithPara(int id, string name);
public void Show()
{
int iNum = 100;
{
//.NetFramework1.0 1.1
noreturnWithPara method = new noreturnWithPara(this.Study);
method.Invoke(123, "ByBoy");
this.Study(123, "ByBoy");
}
{
//.NetFramework2.0 匿名函数,其实就是个方法,不用独立声明;共享变量
noreturnWithPara method = new noreturnWithPara(delegate (int id, string name)
{
Console.WriteLine(iNum);
Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发1!");
});
method.Invoke(234, "楠nan");
}
{
//.NetFramework3.0 lambda表达式:参数列表 goes to 方法体
noreturnWithPara method = new noreturnWithPara(
(int id, string name)
=>
{
Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发2!");
});
method.Invoke(345, "ywa");
}
{
//省略参数类型,语法糖,编译器自动推算,可以省略掉声明
noreturnWithPara method = new noreturnWithPara(
(id, name)
=>
{
Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发3!");
});
method.Invoke(456, "清池");
}
{
//如果方法体只有一行 可以省略大括号和分号
noreturnWithPara method = new noreturnWithPara(
(id, name) => Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发!4"));
method.Invoke(456, "永远的油条");
}
{
//实例化委托时,可以省略掉 new noreturnWithPara(,
//也是编译器提供的便捷功能,是语法糖,编译后其实还是有这段代码的
noreturnWithPara method = (id, name) => Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发!5");
method.Invoke(567, "风行天下");
}
//lambda表达式是什么?!
//lambda是代码的简化,其本质是个方法,而不是委托(类),也不是委托的实例,只是实例化委托的时的参数!
//反编译查看,会为lambda生成类中类,密封+私有,里面多了几个方法,跟lambda一一对应,lambda也是个语法糖,编译后会起名字
//lambda表达式注册多播委托是无法移除的!
//很多复杂的lambda不会写,可以回去写方法!
{
noreturnWithPara method = (i, s) => Console.WriteLine($"{i}-{s}跟着Eleven老师学习.Net高级开发!6");
}
{
//下面我准备去花式使用lambda,有问题直接问
//Action 框架提供 0到16个参数 没有返回值的 泛型委托
Action action = () => { };//参数为空 就小括号
Action<string> action1 = s => Console.WriteLine(s); //只有一个参数 可以去掉小括号
Action<string, int> action2 = (s, i) => Console.WriteLine($"{i}-{s}跟着Eleven老师学习.Net高级开发!6");
Action<string, int, DateTime, long, string, long> action16 = null;
}
{
//Func 框架提供 0到16个参数 带返回值的 泛型委托
Func<int> func = () => DateTime.Now.Year;//如果方法体只有一行 需要去掉retrun
Func<int, string> func1 = i => i.ToString();
Func<int, DateTime> func2 = (i, s) => DateTime.Now;
Func<string, decimal> func16 = null;
}
{
//Action Func 都是.30出来,是为了统一委托的使用,以后只要用的到委托,都可以用。多线程Task.Run Linq...
}
{
//lambda表达式只能用在委托吗
//不是的 c#6 多了很多应用
//表达式目录树,可以用lambda快速声明
new List<int>().AsQueryable().Where(i => i > 3);
Expression<Func<int, bool>> expression = i => i < 10;
}
}
private void Donothing()
{ }
private void Study(int id, string name)
{
Console.WriteLine($"{id}-{name}跟着Eleven老师学习.Net高级开发!");
}
//起码是vs2015才能用
public void SayHi() => Console.WriteLine(12345);
public int Age => 3;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。