关于泛型
泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行。泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型及其方法的参数类型出现。泛型方法可以将其类型参数用作其返回值的类型或者其某个形参的类型。
使用泛型类型可以最大限度地重用代码,保护类的安全与提高性能,常被用于创建泛型接口、泛型类、泛型方法、泛型事件和泛型委托。通过对泛型类进行约束,可以访问特定数据类型的方法。
泛型的参数类型约束有六种,可以以不同的规则对客户端代码在实例化类时用于类型参数的类型种类施加限制。具体用法见下图。
泛型常被与C++中模板进行比较,关于两者的联系与区别,参见http://col1.blog.163.com/blog/static/19097751920127604811213/。
关于LAMDA表达式
LAMDA表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用LAMDA表达式,可以写入可作为参数传递或作为函数调用返回值的本地函数,另外,LAMDA表达式对于编写LINQ查询特别有帮助。
LAMDA表达式可通过委托方式或表达式目录树类型实现。
通过委托实现的方法较为简单方便,下面重点讨论表达式树。
表达式树提供了一个将可执行代码转换为数据的方法。LINQ提供了一个简单语法,用来将代码转换到名为表达式树的数据结构。
首先,添加命名空间,using System.Linq.Expressions;
Expressions中的部分方法如图。
Expressions类的具体用法,详见http://msdn.microsoft.com/zh-cn/library/system.linq.expressions.expression_methods(v=vs.110).aspx
关于LINQ语句
LINQ,既语言集成查询,是一组用于c#的扩展,它允许c#代码用与查询数据库相同的方式操作内存数据——数组、对象、XML、DataSet等。
LINQ定义了大约40个查询操作符,如select、from、in、where以及order by(C#中)。使用这些操作符可以编写查询语句。不过,这些查询还可以基于很多类型的数据,每个数据类型都需要一个单独的LINQ类型,如上图。
LINQ与常规SQL语句十分类似,详细用法参见http://msdn.microsoft.com/library/bb397926.aspx。