C# 匿名委托、匿名方法、匿名对象、Lambda表达式
一、匿名类型
可通过使用 new 运算符和对象初始值创建匿名类型。
示例:
var v = new { Name = "Micro", Message = "Hello" };
var v = new[] {
new { Name = "Micro", Message = "Hello" },
new { Name = "Soft", Message = "Wold!" }
};
匿名类型通常用在查询表达式的 select 子句中,以便返回源序列中每个对象的属性子集。
var Query = from p in v select new { p.Name };
foreach (var o in Query)
{
Console.WriteLine(o.Name);
}
可以查找对象
IEnumerable<v> results = people.Where(delegate(v p) { return p.Name == "Micro"; });
二、匿名方法
要将代码块传递为委托参数 例如:
点击事件
button1.Click += delegate(System.Object o, System.EventArgs e)
{
System.Console.WriteLine("Hello");
};
this.Loaded += delegate
{
InitializeEvent();
};
加载事件
this.Loaded += (sl, el) =>
{
System.Console.WriteLine("Hello");
this.button1.Click += (sender, e) =>
{
System.Console.WriteLine("Wold!");
}
}
匿名方法与线程
System.Threading.Thread thread = new System.Threading.Thread(delegate(j)
{
System.Console.WriteLine("Hello");
});
thread.Start();
System.Threading.ThreadPool.QueueUserWorkItem((s) =>
{
Action f = () =>
{
System.Console.WriteLine("Wold!");
};
}
使委托与匿名方法关联
delegate void DEL(string s);
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DEL p = delegate(string j)
{
System.Console.WriteLine(j);
};
p("Hello");
}
三、Func,Func是有返回值的泛型委托
Func<int> 表示无参,返回值为int的委托
Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托
Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void
匿名方法只能在使用委托的时候创建,事实上,它们通过delegate关键字创建。
使用示例:
var func = new Func<bool, int>(delegate(bool x) { return x ? 10 : 5; });
int ret = func(true);
四、匿名事件
btn.Click += delegate(object o, EventArgs e) { };
五、Lambda 表达式,Func<T>委托
MSDN中写道:“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。
所有Lambda表达式都使用Lambda运算符=>
左边是输入参数列表
1.一个参数:param=>expr
2.多个参数:(param-list)=>expr
右边是表达式或语句块
(参数列表)=>表达式或语句块
合法的Lambda表达式
1、(x, y) => x * y //多参数,隐式类型=> 表达式
2、x => x * 5 //单参数, 隐式类型=>表达式
3、x => { return x * 5; } //单参数,隐式类型=>语句块
4、(int x) => x * 5 //单参数,显式类型=>表达式
5、(int x) => { return x * 5; } //单参数,显式类型=>语句块
6、() => Console.WriteLine() //无参数
在编写Lambda表达式时,可以忽略参数的类型,因为编译器能够根据上下文直接推断参数的类型,示例代码如下。
(x, y) => x + y //多参数,隐式类型=> 表达式
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
区块链开发技术综述
如果你关注区块链技术长达几个月,可能也会跟我一样,对没完没了的原理介绍、前景描绘、行业探讨和链圈新闻产生了审美疲劳。没错,区块链必须与行业紧密结合,它也有颠覆人类协作方式之洪荒巨力,但是说到底它还是一个技术活,是要写代码的,在咖啡厅里整天坐而论道是造不出金链子来的。技术人员的逻辑简单直接,这个事情有没有前(钱)途?有,那怎么干? 本文试图对区块链有关技术流派和主流平台进行一个概览,作为学习区块链技术体系的导览,意在抛砖引玉,促进区块链开发社区的讨论与共识。 区块链技术的流派 未战先谋局,你想投入区块链开发这个领域,至少先要搞清楚现在有哪些玩家,各自的主张和实力如何。 划分区块链技术流派并无一定之规,据我所见,或可有以下四种方式: 第一是按照节点准入规则,划分为公有链、私有链和联盟链。公有链的代表自然是比特币和以太坊,私有链则以R3 Cord
- 下一篇
如何快速成为数据分析师(个人角度)
说来我正式接触数据分析也快一年,对速成还是有一些心得。优秀的数据分析师是不能速成的,但是零经验也有零经验的捷径。 分享之前我还是要推荐下我自己创建的大数据学习资料分享群 710219868 代号风火,这是全国最大的大数据学习交流的地方,2000人聚集,不管你是小白还是大牛,小编我都挺欢迎,今天的已经资讯上传到群文件,不定期分享干货,包括我自己整理的一份最新的适合2018年学习的大数据教程,欢迎初学和进阶中的小伙伴。 以上的前提针对入门,目的是达到数据分析师的门槛,顺利拿到一份offer,不涉及数据挖掘等高级技巧。我的方法倾向互联网领域,不论是分析师这个职位,还是运营、产品的能力发展都是适用的。其他领域就仁者见仁了。 市面上有《七周七数据库》,《七周七编程语言》。今天我们就《七周七学习成为数据分析师》。 没错,七周。 第一周:Excel学习掌握 如果Excel玩的顺溜,你可以略过这一周。不过介于我入行时也不会vlookup,所以有必要讲下。 重点是了解各种函数,包括但不限于sum,count,sumif,countif,find,if,left/right,时间转换等。 Excel函数不...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用