.NET Framework各个版本(3.5 - 4.0)
Lambda表达式
只要有委托参数类型的地方,就可以使用Lambda表达式。常用于Linq的两种语法风格:
查询语法(Query Syntax),这种语法格式类似于SQL查询。
点语法(Dot-nontation Syntax),这种语法是基于拓展方法的。
查询语法的格式:查询表达式必须以from开头,以select或group结束。在这两个子句中间可以使用where,orderby,join,let和其他from子句。
Linq有的方法有延迟的特性,这个特性的效果是直到对结果进行遍历,才会执行该查询。
以下是常见的几种拓展方法:
拓展方法 |
描述 |
延迟 |
All |
如果数据源的所有条目都与谓词匹配,则返回true |
否 |
Any |
如果数据源至少有一个条目与谓词匹配,则返回true |
否 |
Contains |
如果数据源包含指定的条目或值,返回true |
否 |
Count |
返回数据源的条目数 |
否 |
First |
返回数据源的第一个条目 |
否 |
FirstOrDefault |
返回数据源的第一个条目,或无条目时,返回默认值 |
否 |
Last |
返回数据源最后一个条目 |
否 |
LastOrDefault |
返回数据源最后一个条目,或无条目时,返回默认值 |
否 |
Max或Min |
返回由Lamdba表达式表示的最大值或最小值 |
否 |
OrderBy OrderByDesceding |
基于Lambda表示式返回值对数据源进行排序 |
是 |
Reverse |
反转数据源中数据项的顺序 |
是 |
Select |
设计一个查询结果 |
是 |
SelectMany |
把每个数据项投射到一个条目序列中,然后把所有的这些结果序列连接成一个序列 |
是 |
Single |
返回数据源第一个条目,或者有多个匹配时抛出异常 |
否 |
SingleOrDefault |
返回数据源第一个条目,或无条目时,返回默认值;有多个条目匹配时,抛出一个异常 |
否 |
Skip SkipWhile |
跳过指定数目的元素,或者当谓词匹配时跳过 |
是 |
Sum |
对谓词选定的词求和 |
否 |
Take TakeWhile |
从数据源的开始处选择指定数目的元素,或当谓词匹配时选择条目 |
是 |
ToArray ToDictionary ToList |
把数据源转成数组,字典,列表 |
否 |
Where |
过滤数据源中与谓词不匹配的条目 |
是 |
可选参数(Optional parameter)与命名参数(Named parameter)
可选参数能让我们对一些参数赋予默认值,它的作用类似于方法的重载,同一个方法可以有多个不同的参数。
命名参数最大的特点是我们不必再纠结于参数的顺序了,只要知道参数名,就能准确地调用方法。
例子:
方法的定义
/// <summary>/// 追加一个值到key上/// </summary>/// <param name="key"></param>/// <param name="value"></param>/// <remarks>如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。</remarks>/// <returns>返回append后字符串值(value)的长度。</returns>public long StringAppend(string key, string value,int db = -1){return RedisManager.WriteDataBase(db).StringAppend(key, value);}
调用方法:
[TestMethod]public void StringAppend(){//常规调用方法var len = _command.StringAppend("myStr", "wuhan", -1);//命名参数,顺序可变//可选参数,方法在声明时已经指定了默认值时,可选len = _command.StringAppend(value: "wuhan", key: "mystr");Assert.AreEqual(16, len);}
泛型的协变(Convariant)和抗变/逆变(Contravariant)
协变和抗变:在.NET 4之前,泛型接口是不变的。.NET 4通过协变和抗变为泛型接口和泛型委托添加了一个重要拓展。协变和抗变指对参数和返回值的类型进行转换。
协变:协变类型用out参数标注,支持隐式转换,可以将方法的返回值设置为T,不能把T作为输入参数
抗变:抗变类型用in参数标注,泛型接口就是抗变的,支持强制转换,可以将T作为输入参数,不能将T设置为返回值。
例子:
定义接口:
public interface IEnergy<out T>{//协变,支持隐式转换,可以将方法的返回值设置为T,不能把T作为输入参数T Fun1();}public interface IPhysiclalStatus<in T>{//抗变,支持强制转换,可以将T作为输入参数,不能把T作为返回值void Fun1(T obj);}
动态绑定(Dynamic binding)
Dynamic在ASP.NET MVC的数据绑定中会用到,MVC有两种绑定数据的方法:ViewData与ViewBag,它们有以下区别:
ViewData | ViewBag |
它是Key/Value字典集合 | 它是Dynamic类型对像 |
从Asp.net MVC 1 就有了 | ASP.NET MVC3 才有 |
基于ASP.NET 3.5 | 基于ASP.NET 4.0 |
ViewData比ViewBag快 | ViewBag比ViewData慢 |
在ViewPage中查询数据时需要转换合适的类型 | 在ViewPage中查询数据时不需要类型转换 |
有一些类型转换代码 | 可读性更好 |
说实话,稳妥起见我一般用的还是ViewData,因为我能够很清楚的知道数据会是什么类型,这样能避免犯错。
参考:https://www.cnblogs.com/wintersun/archive/2012/01/21/2328563.html
.NET Framework各个版本(3.5 - 4.0)相关推荐
- 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想
前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...
- .net Framework各个版本之间的发展
原文:.net Framework各个版本之间的发展 上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET FrameWork,身为一个NET程序员,里面大概的区别自己还 ...
- Spring Framework 5.1.6、5.0.13 与 4.3.23 发布
开发四年只会写业务代码,分布式高并发都不会还做程序员? Spring Framework 5.1.6.5.0.13 与 4.3.23 发布了. v5.1.6 包含 49 个 bug 修复和功能改进 ...
- 《你必须掌握的Entity Framework 6.x与Core 2.0》书籍出版
前言 到目前为止写过刚好两百来篇博客,看过我博客的读者应该大概知道我每一篇博客都沿袭着一贯的套路,从前言到话题最终到总结,本文依然是一如既往的套路,但是不是介绍技术,也可说是介绍技术,不过是介绍书中的 ...
- cygwin-1.7 离线安装包_.NET Framework所有版本微软官方下载地址
许多应用程序的运行需要依赖Microsoft .NET Framework,而发展到今天,.NET Framework的版本已有很多,从新到旧包括: .NET Framework 4.8 .NET F ...
- Windows 10 离线安装.NET Framework 3.5(包括.NET 2.0和3.0)
文章目录 前言 检查Windows 版本 获取镜像文件方法一,下载系统镜像 获取镜像文件方法二,利用工具生成镜像 下载提取好的.net2.0~3.5安装包 有镜像文件以后离线安装 打开镜像 总结 前言 ...
- .NET Framework 各版本介绍和下载链接汇总
一..NET Framework 版本介绍 自2000年6月22日微软向全球宣布自己的.NET战略,到现在已经十年多了.作为.NET战略的基础,Microsoft .NET Framework 也已经 ...
- .NET Framework 不同版本之间区别
什么是.NET Framework? .NET Framework又称 .Net框架.是由微软开发,一个致力于敏捷软件开发(Agile software development).快速应用开发(Rap ...
- office便捷办公02:安装visio2010需要MSXML版本6.10.1129.0及Error1935解决办法
问题一:需要MSXML版本6.10.1129.0,请安装此组建 解决方案: 1 下载文件(64位建议三个文件全下载) 官网链接 https://www.microsoft.com/zh-cn/down ...
最新文章
- C# string.Empty
- kubernetes入门(06)kubernetes的核心概念(3)
- C++ 复制vector值到array,复制 array 到jintArray
- 【蓝桥杯Java_C组·从零开始卷】第二节(附)、if与switch效率比较(千万次/一亿次)
- 程序员面试100题之十五:数组分割
- ElasticSearch5.3插件开发(二)获取集群健康信息
- 【征稿倒计时—山东科技大学主办】 2021智能装备与特种机器人国际会议(ICIESR2021)...
- 两台服务器安装redis集群_redis 集群搭建,小白也能搭三主三从的集群环境
- Java 数组常用操作二(扩充、扩容、重复数据、动态数组、数组差集、数组交集、查找指定元素、判断是否相同、数组合并)
- 设置ORACLE_HOME环境变量
- 化作春泥更护花的上一句是什么?化作春泥更护花作者是谁
- Java基础教程【第八章:访问修饰符】
- python基础之字符串类型
- oracle的汇总模板,Oracle EBS汇总模板建立问题处理
- 数学画图软件_关于数学建模(或科研绘图)的画图学习建议
- 2022建筑电工(建筑特殊工种)考试模拟100题及模拟考试
- LinuxC高级day1
- SpringMybaits数据库配置解惑
- Spark源码系列(六)Shuffle的过程解析 - 岑玉海
- MySQL水平分区表初体验总结