.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,它们有以下区别:

ViewDataViewBag
它是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值