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

本文关键字:声明 初始化 语句 单个 var 为什么 | 更新日期: 2023-09-27 18:15:22

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

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

var x;
x = 100;

既然它是一个隐式类型的局部变量"var",并且编译器接受变量赋值操作符右边的类型,为什么只在一条语句中声明和初始化它会有什么关系呢?

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

因为声明变量的语句需要暗示该类型,以便编译器知道如何处理var。当然,作为一个有自己直觉的人,您可以在逻辑上逐步执行代码并确定将是什么类型。但是编译器并不像人类的直觉那么复杂。它需要在语句中定义的类型,以便将该语句编译为逻辑上完整的操作。

每个语句都需要单独完成并可编译。

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

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

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

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

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

基本上,你是在问为什么编译器不能在第一次赋值时确定类型,而不是在声明时确定类型,对吗?考虑以下内容:

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

编译器要做什么?if语句只能在运行时求值,而不能在必须识别类型的编译时求值。但在编译时,它仍然可以是int或string类型。

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

编译器根据赋值来确定类型。因为你是在下一行赋值,所以它不能确定类型。