为什么只能在单个语句中声明和初始化var?

时间:2015-09-30 13:27:42

标签: c#

为什么只能在C#中的单个语句中声明和初始化var?

我的意思是为什么我们不能使用:

var x;

x = 100;

因为它是隐式类型的局部变量" var"并且编译器采用了变量赋值运算符右侧的类型,为什么它只应在单个语句中声明和初始化呢?

5 个答案:

答案 0 :(得分:12)

因为声明变量的语句需要暗示类型,以便编译器知道如何处理SELECT DISTINCT id, website FROM your_table WHERE website IS NOT NULL 。当然,作为一个有自己直觉的人,你可以逻辑地逐步完成代码并确定的类型。但编译器并不像人类直觉那样复杂。它需要在该语句中定义的类型,以便将该语句编译为逻辑上完整的操作。

每个陈述都需要单独完整和可编辑。

答案 1 :(得分:3)

首先,因为编译器只是这么聪明。

其次,因为它实际上会降低可读性 - 您无法通过查看其定义来快速推断出变量的类型。

答案 2 :(得分:2)

不允许这样做,因为你可以这样做:

var a;
if (someCondition)
   a = 3;
else
   a = "abc";

C#必须在编译时知道变量类型,在这种情况下,它只能在运行时知道类型。

答案 3 :(得分:2)

基本上,你问的是为什么编译器不能在第一次分配时确定类型,而不是在声明中确定,对吧?请考虑以下事项:

var x;

if (DateTime.Now.Hour > 12)
{
    x = 100;
}
else
{
    x = "Hello";
}

编译器要做什么? if语句只能在运行时进行计算,而不能在必须标识类型的编译时进行计算。但是在编译时,它仍然可以是int或字符串。

答案 4 :(得分:1)

var实际上只是语法糖。它是速记,所以你不必写出变量类型,但在引擎盖下C#仍然是一种强类型语言。

编译器根据赋值确定类型。由于您要在以下行中进行分配,因此无法确定类型。