思维的乐趣

Enjoy it
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.NET/C#中的隐式类型局部变量(Implicitly Typed Local Variables)

Posted on 2010-06-04 00:02  szh114  阅读(1628)  评论(0编辑  收藏  举报

var i = 10; // implicitly typed
int i = 10; // explicitly typed

如上所示,var关键字可以用来定义一种变量,这种变量的类型可以被编译器在编译时自动根据其初始化值来识别,这个可以用 somevar.GetType().Name 值来进行验证。除了可以
对常见的类型如 int , bool , string 变量应用隐式类型以外,其它的数组,LIST<T>,及用户定义对象,都可以用var定义,然后用这些类型的值初始化之。如

var EvenNumbers = new int[]{ 2,4 ,6 ,8}; 要注意,定义隐式类型数组时,类型必须都为同一型,因为编译器不会自动把不同类型的对象视为System.Object 类型。
var MyCars = new List<car>();
var Mycar = new car();

注意:var 型变量只能定义于方法中做为局部变量,不能是类成员变量。也不能用于方法的参数或者返回值中。
对于隐式类型变量来说,如果不能识别其类型,那就没有意义了,所以var变量在声明时必须同时初始化,并且不能赋 null 值。但假如我们已经初始化一个var变量,编译器已经由此判断
出该变量的类型了,那么接下来,这种变量就可以被赋null值了。由于以上规定,一个var型变量一旦被定义,那么编译器必然同时确定了其类型,那么以后,它的类型就定了,你可以按类
型给它赋新值,也可以把它赋给别的值,或者做为方法的返回值什么的。 同样,一旦定义好后,var变量就可以接受null值了。
但还有一个规定:不能定义可空的var变量。因为可空,就意味着可以用null初始化它,而var型变量是不可以接受null值初始化的。

一个变量,不直接定义,非要弄成var型,让读代码的人还得自己判断,倒底有什么意义呢?意义在于LINQ中。并且,大牛们也推荐,只在涉及到LINQ时,才使用隐式类型变量。