Linq有很多值得学习的地方,这里我们主要介绍Linq局部变量,包括介绍对象初始化和集合初始化等方面。
Linq局部变量类型
使用这个特性,声明一个Linq局部变量,它的具体类型是通过初始化表达式来推断。这点是通过var 关键词完成的(这个使用脚本语言的人应该很熟悉,但它们实际上是有很大区别的)。我们可以写出如下的代码:
- var num = 50;
- var str = "simple string";
- var obj = new myType();
- var numbers = new int[] {1,2,3};
- var dic = new Dictionary<int,myType>();
编译器会生成IL中间代码,就如同我们编译了下面的代码:
- int num = 50;
- string str = "simple string";
- myType obj = new myType();
- int[] numbers = new int[] {1,2,3};
- Dictionary<int,myType> dic = new Dictionary<int,myType>();
注意,这里并不存在无类型的变量,也没有推迟类型的绑定。编译器是从右边的赋值语句来自动推断和声明变量的类型的,var 关键词是一个强类型的变量引用。
对象初始化和集合初始化
我们继续使用上面的Point 类。假设我们想要这个类的一个实例,我们会建立对象并设置它的属性,代码会是这样子的:
- Point p = new Point();
- p.X = 0;
- p.Y = 0;
现在,使用对象初始化,就可以像这样子来重写:
- Point p = new Point() { X = 0, Y = 0 };
这个特性也可以使用在集合上,看看下面这段示例:
- List points = new List {
- new Point { X = 2, Y = 5 },
- new Point { X = 1, Y = -10 },
- new Point { X = 3, Y = 0 }
- };
注意,编译器会产生和上面相等价的长一些的代码,它依次调用Add() 方法来在集合里添加元素。以上介绍Linq局部变量。
【编辑推荐】