var是初始化一个匿名类型对象的专用关键字, 如果结合var和匿名类型, 在C#3.0中初始化一个匿名类型的对象是十分有个性的, 这样的初始化方法让当时刚接触C#的我一直摸不清头脑, 例如下面这个例子:
var myFriend = new {Name = "Tom", Sex = "male"};
这样就初始化了一个匿名对象, 当然关键字var的引入, 背后是强大的编译器做支持, 没有显式的类型声明在程序运行的时候就无法给这个类型的实例分配大小合适的内存! 比如这个例子在编译的时候, 编译器将创建一个含有两个string成员的新匿名类型(第一个string成员是Name, 第二个string成员是Sex).
使用关键字var声明变量
这个没有多少好说的:
var i = 10; //与int i = 10 效果相同 var s = "Tom"; //与string s = "Tom"效果相同 //...
但这样写就是错的:
var i = 10; i = "Tom";
因为在编译的时候, 编译器会进行"类型推演", 编译器会识别出i是一个int型变量, 但下一行代码图谋将字符串"Tom赋值给i, 显然会编译出错. 其实Visual Studio已经很智能了, 不必等到编译阶段, 在IDE里写这两行的时候就提示出错了.
因此学会了var, 很多人可能喜欢声明任何变量时都使用var关键字, 但回头看看满篇都是var关键字, 过了几个月回头看看代码不能很直接的看出这个变量时什么类型, 造成了代码的可维护性变差了. 在<Linq技术详解>P28作者是这么说的:
为了获得可维护的代码, 不要因为使用var关键字方便, 就随意使用这个关键字. 尽量在需要的时候再使用, 比如在讲一个匿名类型的对象赋值给一个变量的时候.
很多时候变量类型的名字较长(如HttpWebRequest), 而且HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(XXX), 后面已经很明显的进行强类型转换了, 在这种情况下我用var声明变量比较多 :)