LINQ学习
LINQ需要用到:
- 隐式类型
- var关键字
- 匿名类型
- 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。类型名由编译器生成,并且不能在源代码级使用。每个属性的类型由编译器推断。
- 初始化器
- 使用对象初始化器,可以在创建时直接向对象赋值,无需显示的调用对象的构造函数。
- 委托
- 委托是将方法作为参数传递。
- 泛型
- 类型参数,使用参数类型的这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。
- 泛型委托
- 重点
- 匿名方法
- 在3.0以后使用Lambda表达式,有一种情况下,匿名方法提供了 Lambda 表达式中所没有的功能。 您可使用匿名方法来忽略参数列表。 这意味着匿名方法可转换为具有各种签名的委托。 这对于 Lambda 表达式来说是不可能的。
- lambda表达式
- 扩展方法
--------------------------------------------------
Ex:
LINQ中 where扩展方法定义:
定义了:
泛型类型 <TSource>
返回值类型 IEnumerable<TSource>
扩展类型 this IEnumerable<TSource> source
委托参数 Func<TSource, bool> predicate,委托定义如下:
其中 in out 关键字是告诉编译器,形参和返回值支持协变和逆变(评论区)。
只有泛型接口、委托类型才是逆变/协变的,实参只能是引用类型