视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
.net framework中引进的var对象类型声明
2020-11-27 22:42:55 责编:小采
文档

安装了vs 2008之后,在后台代码中,resharper插件对后台所有局部变量进行提示建议,显示需要采用"use implicitly typed local variable declaration",通过代码修改建议,发现有"use Var"的提示,通过字面含义,很快就能知道这是.net framework3.5中引进的新机制,即对局部变量进行自动类型设置,其类型取决于等号右边初始化的对象的类型。在网上查了一下相关解释,记录在此:
一、神奇的var
在C#3.0中增加了一个变量声明var,这个声明和JavaScript 的 var类似,但也有不同。
1.相同点,他能够用var来声明任何类型的局部变量。
2.不同点,他仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量。
二、相同点
他能够声明:
代码如下:

var integer = 10;
var name = "edisundong";
var numbers = new int[] { 1, 2, 3 };

三、不同点

var仅仅是个关键字,他并不是C#3.0中的一种新的类型,而是负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,上面的语句相当于:
代码如下:


int integer = 10;
string name = " edisundong ";
int[] numbers = new int[] { 1, 2, 3 };

四、注意点

1.在声明时必须同时赋值,因为声明依赖于赋值号右边的表达式,假如有下面的语句:
代码如下:


var integer;
integer = 10;

编译时会报Implicitly typed locals must be initialized错误。

2.在使用var声明一个局部变量后,他仍然具备强类型,能够做如下测试:
代码如下:


var integer = 10;
integer = " edisundong ";

编译时会报Cannot implicitly convert type string to int错误。

3. 初始化器表达式的编译期类型不能够是空(null)类型,编译器无法根据null来推断出局部变量的类型,如有下面的语句:
代码如下:


var integer = null;

编译时会报Cannot assign <null> to an implicitly typed local错误。

4. 初始化语句必须是个表达式,初始化表达式不能包含他自身,但是能够是包含一个对象或集合初始化器的一个new表达式(即匿名类型)。 如能够这样去声明:
代码如下:


var coll = new Hashtable();

5. var的声明仅限于局部变量,也能够包含在foreach、for、using语句中。下面的使用是错误的:
代码如下:

class Program
{
 private var i = 10; //全局私有变量。
 static void Main(string[] args)
 { }
}

编译时会报The contextual keyword var may only appear within a local variable declaration错误。

下载本文
显示全文
专题