LINQ体系的研究

前言

今天是16年的大年初一,闷头学习,收获很大,分清LINQ和Lambada,写得时候没那么迷茫了,懂了研究一种体系的时候需要注意新东西出现的目的、应用环境、本质、好处和缺点 —— [ 废话 ]

通过var、匿名对象、扩展方法、委托、匿名方法、Lambada来抛砖引玉引出LINQ —— [ 开干 ]

推断类型—var

机制:运行时推断数据类型
效率:和明确类型一样
环境:局部变量
好处:防止变量没有初始化
注意:初始化后无法更改数据类型

var num = 25;
var str = "2016年新年快乐"

var这种东西是弱类型,但这种概念不会根植在自己的脑海里

匿名对象

机制:编译器创建新的class
好处:1.封装 2.按需创建临时对象
环境:方法体内

var tempObj = new{Name = "pp",Age = 12};

小技巧例如PropertyGrid绑定个别属性

扩展方法

目的:为一种数据类型添加静态方法

委托

本质:编译器根据委托变量创建匿名对象
理解:一种特殊的数据类型
好处:动态的更迭签名相同的方法、广播、传递消息、做一些没有委托会很繁琐的事情(例如集合soft方法的排序实现方法)

public delegate void DelegateHandler(int num);

因为我有C++的底子,知道函数指针这玩意,可以把委托当做一种特殊的数据类型,那如果这样说,委托也有变量定义、赋值,不同的是赋值的是一个方法。
既然本质是编译器会产生一个匿名对象,就是一个class结构的实例化,那委托就可以像class一样可以有修饰符,代码可以写在class可以写的地方

匿名方法

目的:减少代码,降低复杂度
本质:虽然没有方法名,编译器仍然会给一个名字
效率:和普通方法调用相比,执行速度一样
语法 = delegate + 普通方法签名 - 函数名

DelegateHandler obj = delegate(int num){var s = num;};

Lambada

目的:减少代码,降低复杂度
本质:虽然没有方法名,编译器仍然会给一个名字
效率:和普通方法调用相比,执行速度一样
语法:匿名函数 -delegate关键字 - 参数类型(可减) - 参数所在的小括号(仅有一个参数时可减) - 方法体的花括号及return(方法体只有一行时可减)

DelegateHandler tempObj = a => {a = a-2;};

Linq

种类:Linq查询方法、Linq查询语句
目的:简化集合的查询
应用对象:集合
优点:查询也变得便利
执行:延迟执行

我尽可能简化的描述清楚:
-------Linq的查询方法---------
集合的查询可以使用集合带有的扩展方法来快速查询,
该些扩展方法就是Linq的查询方法,
Linq的查询方法参数是委托类型,
委托类型参数填充的是方法,
方法可以使用匿名方法简化,
匿名方法可以使用Lambada简化,
因此,集合的Linq查询方法中填充Lambada可以做到快速查询、降低复杂度等优点
-------Linq的查询语句---------
Linq可以写查询语句,
是Linq的另一种使用方法,
编译器不识别查询语句,
将语句转化为查询方法来查询
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值