为什么不让C#使用var声明多个variables?

鉴于以下情况:

// not a problem int i = 2, j = 3; 

所以这令我感到惊讶:

 // compiler error: Implicitly-typed local variables cannot have multiple declarators var i = 2, j = 3; 

不编译。 也许有什么我不明白这个(这就是为什么我问这个)?

但为什么编译器不知道我的意思是:

 var i = 2; var j = 3; 

这将编译。

这只是程序员和编译器可能混淆的另一点。

例如,这很好:

 double i = 2, j = 3.4; 

但是,这是什么意思?

 var i = 2, j = 3.4; 

用语法糖这种东西是没有人需要的头痛 – 所以我怀疑你的情况会永远支持。 它涉及太多的编译器,试图有点太聪明。

当我们devisefunction时,我问社区什么

 var x = 1, y = 1.2; 

应该是意思。 问题和答案在这里:

http://blogs.msdn.com/b/ericlippert/archive/2006/06/26/what-are-the-semantics-of-multiple-implicitly-typed-declarations-part-one.aspx

http://blogs.msdn.com/b/ericlippert/archive/2006/06/27/what-are-the-semantics-of-multiple-implicitly-typed-declarations-part-two.aspx

简单地说,大约一半的回答者说,明显正确的做法是让x和y都加倍,大约一半的回答者说明显正确的做法是使x int和y加倍。

(语言委员会指定它应该是“双重”的,而且我实际上在我们发行之前就已经实现了这个代码,我们使用了与隐式types数组相同的types推理algorithm,其中所有的expression式必须可以转换为最好的元素types。)

当一半的客户群认为有一件事情“明显正确”,另一半则认为相反是“明显正确”的时候,那么你的devise就有了很大的问题。 解决办法是使整个事情非法,避免这个问题。

因为如果这工作:

 var i = 2, j = 3; 

因为这工作:

 var i = 2; var j = 3; 

那么你可能会期望这个工作:

 var i = 2, j = "3"; 

因为这工作:

 var i = 2; var j = "3"; 

即使在詹姆斯·高特(James Gaunt)提出的情况下,他们都是数字types,并且可以存储在相同types的值中,我将是什么types的?

 var i = 2, j = 3.4; 

j显然是一个双,但i可以逻辑上是一个int或一个双,取决于你如何预期var推断types。 无论哪种方式实施,你会造成混淆的人谁期望它的工作方式。

为了避免所有这些混淆,简直是不允许的。 我个人并不认为这是一个巨大的损失, 如果你想声明一个variables列表(这在我的工作经验中本身就很less见),只需强制键入em即可。

我认为这太过于可笑了。 当两个variables是相同的types时,这是一个简单的例子,但是在更一般的情况下,你必须考虑代码中的“正确”,比如:

 var x = new object(), y = "Hello!", z = 5; 

这些都应该作为object ,因为这是唯一的共同点? 或者,如果xobjectystring ,而zint

一方面你可能会认为前者,因为以这种方式声明的variables(全部在一行上)通常被假定为全部是相同的types。 另一方面,也许你会认为它是后者,因为var关键字通常应该让编译器为你推断最具体的types。

更好的办法就是完全禁止这样做,而不是完全弄清楚它应该如何行事,因为无论如何它不会完全是一个“杀手”function。

这是我的意见/猜测,至less。

我想,这是因为对于编译器,它可能是相同的:

var i = 2, j = "three"

而那些肯定不是同一types的。