在C#中使用“var”声明变量

9

在C#中使用"var"声明变量时,是否会发生装箱/拆箱?


同时,在使用var声明变量时是否存在运行时类型不匹配的可能性?

2个回答

25

不会。使用 var 关键字编译时会被视为指定了确切的类型名称,例如:

var x = 5;

int x = 5;

编译为相同的 IL 代码。


我写了同样的东西,但你比我快几秒钟;-) +1并删除了我的评论。 - Matt Briggs
没错。问题是,使用 var 声明局部变量时 必须 立即初始化,因此编译器可以轻松地推断类型。 - Mehrdad Afshari
你不必立即初始化。你可以只声明变量,稍后再进行赋值。但是你必须在该作用域块中对其进行赋值,编译器将根据该赋值确定类型。 - Joel Coehoorn
2
Joel: 不,如果你使用 var ,则必须立即初始化。请参阅 C# 3.0 规范的第 8.5.1 节。 - Jon Skeet

10

var只是一个便利关键字,告诉编译器找出类型并将"var"替换为该类型。

在使用LINQ等技术时,它最有用,因为查询的返回类型有时很难确定。

当使用嵌套泛型声明或其他较长的声明时,它也很有用(可以节省一些打字):

var dic = new Dictionary<string, Dictionary<int, string>>();

1
在我看来,节省打字并不重要 - 然而,当阅读代码时,减少视觉混乱却很重要。 - Jon Skeet
1
但这样做会使您的所有变量更具体。通常最好在c是成员变量时说“Collection c=new LinkedList()”,但当它是局部变量时,这并不是什么大问题。 - Bill K
@Bill:当c是一个成员变量时,你不能使用var,所以你别无选择。 - configurator
好的,我不知道那个。那就没问题了。(抱歉,我是Java程序员,虽然我很喜欢C#中听到的许多功能) - Bill K
var不仅是方便,而且在与匿名类型一起使用时(例如使用LINQ Select投影创建的类型),没有其他选择,只能使用var。 - AnthonyWJones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接