在c#1.0,c#2.0中声明一个变量时,老是要指定变量的类型,若是不指定变量类型编译器就会报错,产生编译错误。在c#3.0中咱们能够不指定变量的具体类型,而使用一个新的关键字"var"来指定变量的类型,该变量的实际类型将在其初始化表达式中推到出来。下面实例代码中,咱们用var声明了3个局部变量,并获取他们的类型:c#
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[] 数组类型。彻底是正确的。spa
可是在var使用过程当中必须遵循3个原则:3d
一、var声明的变量必须包含初始化器,初始化器必须为一个表达式,且初始化器不能包含自身对象。code
var numberid = numberid + 1;//编译错误对象
能够看到上面的编译错误很明显。blog
二、var声明的变量初始化值不能为null。编译器
三、var声明变量时,不能在同一语句中初始化多个隐式类型的变量。string
看来var 关键字很方便,能够简化代码,可是大量使用var声明变量会使得代码难以理解。所以咱们通常在Linq表达式中难以肯定变量的查询结果的类型的时候使用var关键字是一个不错的选择。it