9.2 隐式类型的局部变量
C#能根据初始化表达式的类型推断方法中的局部变量的类型。
private static void ImplicitlyTypedLocalVariables() { var name="Jeff";//System.String //var n=null//错误,不能将null赋值给隐式类型的局部变量 var x=(String)null;//可以这样写但意义不大,System.String //声明数组 var numbers=new Int32[]{1,2,3,4};//System.Int32[] //复杂类型少打字 var collection=new Dictionary<String,Single>(){{"Grant",4.0f}}; //foreach里少打字 foreach(var item in collection){} }
主要用处
在复杂类型中不需要在左侧写出全称,如果需要修改类型仅需修改右侧的类型。
在foreach循环中,var让编译器自动推断集合中元素的类型。
还可在试验代码时利用它,用方法的返回值初始化隐式类型的局部变量。
开发方发时可以灵活更改返回类型。编译器能察觉到返回类型的变化并自动更改变量的类型。
注意事项
不能用var声明方法的参数类型。
编译器必须根据在call site传递的实参来推断参数类型,但call site可能一个都没有也可能有好多个。
不能用用var声明类型中的字段。
字段可以被多个方法访问,这个变量的类型应该显示陈述,一旦允许,匿名类型就会泄露到方法的外部。
用var声明局部变量只是一种简化语法,不要混淆dynamic和var。参考第五章5.5节