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)相关推荐

  1. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

    前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...

  2. .net Framework各个版本之间的发展

    原文:.net Framework各个版本之间的发展 上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET  FrameWork,身为一个NET程序员,里面大概的区别自己还 ...

  3. 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 修复和功能改进 ...

  4. 《你必须掌握的Entity Framework 6.x与Core 2.0》书籍出版

    前言 到目前为止写过刚好两百来篇博客,看过我博客的读者应该大概知道我每一篇博客都沿袭着一贯的套路,从前言到话题最终到总结,本文依然是一如既往的套路,但是不是介绍技术,也可说是介绍技术,不过是介绍书中的 ...

  5. cygwin-1.7 离线安装包_.NET Framework所有版本微软官方下载地址

    许多应用程序的运行需要依赖Microsoft .NET Framework,而发展到今天,.NET Framework的版本已有很多,从新到旧包括: .NET Framework 4.8 .NET F ...

  6. Windows 10 离线安装.NET Framework 3.5(包括.NET 2.0和3.0)

    文章目录 前言 检查Windows 版本 获取镜像文件方法一,下载系统镜像 获取镜像文件方法二,利用工具生成镜像 下载提取好的.net2.0~3.5安装包 有镜像文件以后离线安装 打开镜像 总结 前言 ...

  7. .NET Framework 各版本介绍和下载链接汇总

    一..NET Framework 版本介绍 自2000年6月22日微软向全球宣布自己的.NET战略,到现在已经十年多了.作为.NET战略的基础,Microsoft .NET Framework 也已经 ...

  8. .NET Framework 不同版本之间区别

    什么是.NET Framework? .NET Framework又称 .Net框架.是由微软开发,一个致力于敏捷软件开发(Agile software development).快速应用开发(Rap ...

  9. office便捷办公02:安装visio2010需要MSXML版本6.10.1129.0及Error1935解决办法

    问题一:需要MSXML版本6.10.1129.0,请安装此组建 解决方案: 1 下载文件(64位建议三个文件全下载) 官网链接 https://www.microsoft.com/zh-cn/down ...

最新文章

  1. C# string.Empty
  2. kubernetes入门(06)kubernetes的核心概念(3)
  3. C++ 复制vector值到array,复制 array 到jintArray
  4. 【蓝桥杯Java_C组·从零开始卷】第二节(附)、if与switch效率比较(千万次/一亿次)
  5. 程序员面试100题之十五:数组分割
  6. ElasticSearch5.3插件开发(二)获取集群健康信息
  7. 【征稿倒计时—山东科技大学主办】 2021智能装备与特种机器人国际会议(ICIESR2021)...
  8. 两台服务器安装redis集群_redis 集群搭建,小白也能搭三主三从的集群环境
  9. Java 数组常用操作二(扩充、扩容、重复数据、动态数组、数组差集、数组交集、查找指定元素、判断是否相同、数组合并)
  10. 设置ORACLE_HOME环境变量
  11. 化作春泥更护花的上一句是什么?化作春泥更护花作者是谁
  12. Java基础教程【第八章:访问修饰符】
  13. python基础之字符串类型
  14. oracle的汇总模板,Oracle EBS汇总模板建立问题处理
  15. 数学画图软件_关于数学建模(或科研绘图)的画图学习建议
  16. 2022建筑电工(建筑特殊工种)考试模拟100题及模拟考试
  17. LinuxC高级day1
  18. SpringMybaits数据库配置解惑
  19. Spark源码系列(六)Shuffle的过程解析 - 岑玉海
  20. MySQL水平分区表初体验总结

热门文章

  1. day01 Redis
  2. apache评分表的意义_APACHE评分系统及评分表 -
  3. 百度地图 获取经纬度为4.9E-324
  4. 【转】固态硬盘恢复之30分钟大法操作技巧
  5. 1024人工智能和大数据应用高峰论坛
  6. UART总线协议——esp32学习笔记
  7. 当前时间的七天前和七天后
  8. APP切换到后台时的运行规则以及如何实现后台运行
  9. AirPods Pro 和 AirPods 3 固件更新,或将提升稳定性,如何操作看这里
  10. 示例-Luat示例-HTTP