为什么不让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;
应该是意思。 问题和答案在这里:
简单地说,大约一半的回答者说,明显正确的做法是让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
,因为这是唯一的共同点? 或者,如果x
是object
, y
是string
,而z
是int
?
一方面你可能会认为前者,因为以这种方式声明的variables(全部在一行上)通常被假定为全部是相同的types。 另一方面,也许你会认为它是后者,因为var
关键字通常应该让编译器为你推断最具体的types。
更好的办法就是完全禁止这样做,而不是完全弄清楚它应该如何行事,因为无论如何它不会完全是一个“杀手”function。
这是我的意见/猜测,至less。
我想,这是因为对于编译器,它可能是相同的:
var i = 2, j = "three"
而那些肯定不是同一types的。