C# 隐式类型—关键字:var
[ C# 3.0/.Net 3.x 新增特性 ]
2.1 犹抱琵琶半遮面—你能猜出我是谁?
以前,我们在定义每个变量时都需要明确指出它是哪个类型。但是,当有了var之后,一切变得那么和谐,我们可以用一个var定义所有的类型。
var age = 100; age += 150; var name = ""; name = "edisonchou"; Console.WriteLine("age={0}", age); Console.WriteLine("name={0}", name);
点击调试,发现编译器自动帮我们匹配上了正确的类型并成功显示出来:
那么,我们又好奇地想知道编译器到底是否识别出来了指定的类型,于是我们再次通过反编译工具来一看究竟:
可以看出,我们可爱的CSC正确地帮我们推断出了正确的类型,不由得想给它点32个赞了!
但是,变量类型不可更改,因为声明的时候已经确定类型了,例如我们在刚刚的代码中给变量赋予不同于定义时的类型,会出现错误。
2.2 好刀用在刀刃上—隐式类型应用场景
在数据型业务开发中,我们会对一个数据集合进行LINQ查询,而这个LINQ查询的结果可能是ObjectQuery<>或IQueryable<>类型的对象。因此,在目标具体类型不明确的情况下,我们可以用var关键来声明:
List<UserInfo> userList = roleService.LoadRoles(param); var data = from u in userList where u.IsDel == 0 select u;
2.3 但“爱”就是克制—隐式类型使用限制
(1)被声明的变量是一个局部变量,而不是静态或实例字段;
(2)变量必须在声明的同时被初始化,编译器要根据初始化值推断类型;
(3)初始化不是一个匿名函数,同时初始化表达式也不能是 null;
(4)语句中只声明一次变量,声明后不能更改类型;(详见上面的例子)
(5)赋值的数据类型必须是可以在编译时确定的类型;
出处:http://edisonchou.cnblogs.com