在`while`循环中,为什​​么我不能在`for`循环中声明变量?

可能重复:
为什么我们不能在while循环中定义变量?

我想简化以下代码:

string line; while ((line = sr.ReadLine()) != null) 

成:

 while ((string line = sr.ReadLine()) != null) 

但失败了。

但是,我们肯定可以这样做:

 for (int i=0, int n=50;i<n;i++) 

你仍然可以for

 for (string line; (line = sr.ReadLine()) != null; ) ... 

由于while循环采用一个条件,因此每次循环运行时都会声明一个新的line实例,因为每次循环都会计算条件。

它在for循环中工作,因为初始化程序(三个以分号分隔的表达式中的第一个)在开始时只运行一次; 条件是第二个表达式。 尝试在for循环的条件表达式中声明变量时会遇到同样的问题。

我相信原因是你会多次声明变量(循环的每次传递)。

在这里问到并回答得更详细: 同样的问题

在for循环中:

 for(<>,<>,<>) 

第一个表达式只被评估一次。

在一个while循环中:

 while(<>) 

每次运行时都会计算表达式。

多次重新定义相同的变量是没有意义的。