在c#1.0,c#2.0中声明一个变量时,总是要指定变量的类型,如果不指定变量类型编译器就会报错,产生编译错误。在c#3.0中我们可以不指定变量的具体类型,而使用一个新的关键字"var"来指定变量的类型,该变量的实际类型将在其初始化表达式中推到出来。下面实例代码中,我们用var声明了3个局部变量,并获取他们的类型:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Linq; 6 7 namespace LinqDemo 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 14 LingVar(); 15 } 16 17 private static void LingVar() 18 { 19 20 var numberid = 10086; 21 22 var name = "IT少年"; 23 24 var arrayCity = new string[] { "BeiJing", "ShangHai" }; 25 26 27 Console.WriteLine("--numberid的类型----"); 28 Console.WriteLine(numberid.GetType().ToString()); 29 30 Console.WriteLine("--name的类型----"); 31 Console.WriteLine(name.GetType().ToString()); 32 33 Console.WriteLine("--arrayCity的类型----"); 34 Console.WriteLine(arrayCity.GetType().ToString()); 35 36 Console.ReadKey(); 37 38 39 } 40 } 41 }
运行代码可以看到:
我们从运行结果可以看到,最终numberid被推断出类型为System.Int32,name被推断出System.String,arrayCity推断为System.String[] 数组类型。完全是正确的。
但是在var使用过程中必须遵循3个原则:
1、var声明的变量必须包含初始化器,初始化器必须为一个表达式,且初始化器不能包含自身对象。
var numberid = numberid + 1;//编译错误
可以看到上面的编译错误很明显。
2、var声明的变量初始化值不能为null。
3、var声明变量时,不能在同一语句中初始化多个隐式类型的变量。
看来var 关键字很方便,可以简化代码,但是大量使用var声明变量会使得代码难以理解。因此我们一般在Linq表达式中难以确定变量的查询结果的类型的时候使用var关键字是一个不错的选择。