为什么只能在C#中的单个语句中声明和初始化var?
我的意思是为什么我们不能使用:
var x;
x = 100;
因为它是隐式类型的局部变量" var"并且编译器采用了变量赋值运算符右侧的类型,为什么它只应在单个语句中声明和初始化呢?
答案 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#仍然是一种强类型语言。
编译器根据赋值确定类型。由于您要在以下行中进行分配,因此无法确定类型。