我们来看下列变量声明
![None.gif](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
var numbers = new int [] {1,2,3} ;
首先,C# compiler 会在同一个namespace范围内寻找用户自定义的var类型,如果找到,则把i, numbers做作var类型处理。如果没找到,则认为i, numbers为implicitly typed local variables,并根据其初始值确实其类型,上述代码的IL代码和下列代码的IL相同
![None.gif](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
int [] numbers = new int [] {1,2,3} ;
使用Implicitly typed local variables时应遵守下列约束:
1. The declarator must include an initializer
2. The initializer must be an expression
3. The initializer expression must have a complie-time type which cannot be the null type.
4. The local variable declaration cannot include multiple declarations.
5. The initializer cannot refer to itself.
粗一看,额的神啊,一共有五条约束,还挺麻烦的,其实归纳下来主要就一句话,必须要让编绎器能从initializer准确推断出变量的类型,编绎器也是人啊,它需要根据推断出来的类型为变量分配内存空间。
比如: var x = {1,2,3} //error, cannot infer the type from {1,2,3"}
var x = new int[]{1,2,"3}; // right. x is an array of type integer
最后说一下Implicitly typed local variable的使用范围,它可不是到处能用。仅仅可以用于下面四种情况
1. 局部变量声明
2. for 语句中变量声明)
3. using 语句初始化变量时.
4. foreach 中iterator类型声明)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-612300/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12639172/viewspace-612300/