为什么不允许使用 'var' 的复合定义?

Why are compound definitions using 'var' not allowed?

好吧,我真的认为这会起作用(在方法内部):

var x, y = 1;

var x = 1, y = 2;

但它没有,它不会编译 - "var is not allowed in a compound definition"。

我想这是一个通常的权衡取舍的原因。这不是一个非常常用的功能,因此没有实现,但我们可以,并且可能会在未来的版本中......

好吧,如果你给它一个清单类型:

int x, y = 1;

这声明了两个 int 变量,并初始化了其中一个。但是局部变量类型推断需要一个初始化器来推断类型。所以你已经死了。

但是,假设您打算为两者提供一个初始值设定项。 "obvious" 当两个初始值设定项具有相同类型时该怎么做。所以让我们让它变得更难。假设你说:

var x = 1, y = 2.0;

这是什么意思?这是否将 x 声明为 int 并将 y 声明为 float?或者它是否试图找到某种可以同时是 x 和 y 类型的类型?无论我们决定采用哪种方式,有些人会认为它应该以另一种方式工作,这会从根本上造成混淆。

还有,有什么好处?与潜在的语义混淆相比,说出你的意思所增加的句法成本是微不足道的。这就是为什么我们将其排除在本地类型推断范围之外的原因。

你可能会说,那么,"well, only make it work if they are the same type." 我们可以做到这一点,但现在什么时候可以使用推理,什么时候不能使用推理的界限 甚至更加复杂 。无论如何,我现在都会回答相同类型的 "why don't you" 问题......现实是推理方案总是有局限性;您选择的是边界。最好选择干净、明确的限制 ("can use it in these contexts"),而不是模糊的限制。