LINQ特有的编程结构
LINQ就像是嵌入到C#中的强类型查询语言,尽管和SQL查询很像,但语法却并不相同,甚至还有截然相反的一面。
LINQ是在.NET发展到3.5版的时候被引进的,C#和VB语言都为此做了许多工作,扩展了大量新的编程结构。
一、隐式类型本地变量
var——一个如此小巧的关键字却有着强大的力量。
var varInt=1;
var varBool=True;
var varString="String, String, String";
Console.WriteLine("varInt is a: {0}",varInt.GetType().Name);
Console.WriteLine("varBool is a: {0}",varBool.GetType().Name);
Console.WriteLine("varString is a: {0}",varString.GetType().Name);
上面的代码会很神奇的自动显示出它们各自的类型。
var的限制:
1.var不能用于字段数据
2.var不能用于返回值或参数类型
3.必须在声明时分配值,且值不为NULL
但var可以这样:
var alarmClock=new AlarmClock();
alarmClock=null;
var varInt=1;
var varInt2=varInt;
bool varBool=True;
var varBool2=varBool;
static int Alarm()
{
var alarm="09:20";
return alarm;
}
隐式类型数据是强类型数据。类型推断延续了C#语言的强类型特性,并且只会在编译时影响变量的声明。之后,该数据点被视为它声明的类型。为该变量分配不同的类型将导致编译时错误。
// 编译器知道“s”是一个string类型
var s="This is a string.";
s="Funny...";
// 因此可以调用string的所有成员
string bigS=s.ToUpper();
// 但不能将非string类型的数据分配给s
s=True;
var为LINQ而生
LINQ技术使用的是查询表达式,它可以根据表达式本身的格式产生动态创建的结果集。但有时在某些情况下根本无法显示定义查询的访问类型,这时隐式类型就会发挥作用了。
二、对象和集合初始化语法
在扩展这个新的特性之前,我们要创建一个对象并给其属性初始化会是这样:
var rect = new Rect();
rect.Height=100;
rect.Width=200;
但是支持C# 3.0加入了这个新特性,代码就成了这样:
var rect = new Rect(){Height=100,Width=200};
如果有构造函数的话还可以在括号内传入参数呢,就像这样:
var rect = new Rect("bigRect"){Height=100,Width=200};
如果对于集合,那就优势就更加明显了。
List<Alarm> alarmList = new List&