在C#中“var”是什么意思?

可能重复:
在C#中使用var关键字

在C#中,关键字“ var ”是如何工作的?

这意味着被声明的本地types将被编译器推断出来:

// This statement: var foo = "bar"; // Is equivalent to this statement: string foo = "bar"; 

值得注意的是, var不会将variables定义为dynamictypes。 所以这是不合法的:

 var foo = "bar"; foo = 1; // Compiler error, the foo variable holds strings, not ints 

var只有两个用途:

  1. 它需要更less的键入来声明variables,特别是当声明variables为嵌套genericstypes时。
  2. 当存储对匿名types的对象的引用时,必须使用它,因为types名称不能预先知道: var foo = new { Bar = "bar" };

你不能使用var作为任何东西,除了当地人的types。 所以你不能使用关键字var来声明字段/属性/参数/返回types。

这意味着数据types是从上下文派生(暗示)的。

http://msdn.microsoft.com/en-us/library/bb383973.aspx

从Visual C#3.0开始,在方法范围声明的variables可以有一个隐式typesvar。 一个隐式types的局部variables是强types的,就像你自己声明了types一样,但编译器决定了types。 以下两个声明在function上是等价的:

 var i = 10; // implicitly typed int i = 10; //explicitly typed 

var用于消除键盘input和视觉噪声,例如,

 MyReallyReallyLongClassName x = new MyReallyReallyLongClassName(); 

 var x = new MyReallyReallyLongClassName(); 

但可以被滥用到可读性被牺牲的地步。

“var”表示编译器将根据使用情况确定variables的显式types。 例如,

 var myVar = new Connection(); 

会给你一个Connectiontypes的variables。

它在初始化时根据分配的内容来声明一个types。

一个简单的例子是代码:

 var i = 53; 

将检查53的types,基本上将其重写为:

 int i = 53; 

请注意,虽然我们可以有:

 long i = 53; 

var不会发生这种情况。 虽然它可以与:

 var i = 53l; // i is now a long 

同理:

 var i = null; // not allowed as type can't be inferred. var j = (string) null; // allowed as the expression (string) null has both type and value. 

对于复杂的types,这可能是一个小小的方便。 匿名types更重要:

 var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name}; foreach(var j in i) Console.WriteLine(j.ID.ToString() + ":" + j.Name); 

这里没有其他的方法来定义ij比使用var因为没有他们持有的types的名字。

你有没有讨厌写这样的variables初始值设定项?

 XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int)) 

所以,从C#3.0开始,你可以用它replace它

 var xmlSerializer = new XmlSerialzer(typeof(int)) 

一个通知:types在编译期间解决,所以没有性能问题。 但编译器应该能够在构build步骤中检测types,所以代码如var xmlSerializer; 根本不会编译。