while循环中的C#语法-不允许变量定义?

while循环中的C#语法-不允许变量定义?,c#,C#,请帮助我理解以下语句生成编译错误的原因: 在while语句中定义变量是否错误 while((string _l = _sr.ReadLine()) != null){ _sb.AppendLine(_l); } //无效的表达式术语“string”是,您需要在循环外声明它: string _l; while((_l = _sr.ReadLine()) != null){ _sb.AppendLine(_l); } 本规范将while语句定义为:

请帮助我理解以下语句生成编译错误的原因: 在while语句中定义变量是否错误

while((string _l = _sr.ReadLine()) != null){
            _sb.AppendLine(_l);
}

//无效的表达式术语“string”

是,您需要在循环外声明它:

string _l;
while((_l = _sr.ReadLine()) != null){
            _sb.AppendLine(_l);
}
本规范将
while
语句定义为:

8.8.1 while语句

while声明:

while(布尔表达式)嵌入语句


由于变量声明不是布尔表达式,因此不能将它们放入while循环的条件中。

是的,需要在循环外声明:

string _l;
while((_l = _sr.ReadLine()) != null){
            _sb.AppendLine(_l);
}
本规范将
while
语句定义为:

8.8.1 while语句

while声明:

while(布尔表达式)嵌入语句


由于变量声明不是布尔表达式,因此不能将它们置于while循环的条件中。

找到了类似的问题和答案:

因为while循环接受一个条件,所以每次循环运行时都会声明一个新的line实例,因为每次循环都会计算该条件


找到了类似的问题和答案:

因为while循环接受一个条件,所以每次循环运行时都会声明一个新的line实例,因为每次循环都会计算该条件


我想在这里的评论中解释一下原因,但意识到了一些事情
for
foreach
可以执行此操作。说“它就是这样设计的”很容易,但现在我真的想知道为什么。我也想知道为什么@Magus-规范分别为\foreach循环定义了
的形式
for
循环有一个显式的初始化器,可以包含变量声明
foreach
循环还可以声明循环得分标识符<代码>while
循环条件必须是一个
布尔表达式。是的,这很有意义。“它是这样设计的。”但是,它不必这样。如果它是这样设计的,那么基本上会得到两个结果:while循环接受它自己的特殊类型的表达式(不同于所有其他表达式),允许在其中进行这种声明,或变量声明本身必须是计算为值的语句。在这种情况下,你可能会把变量声明塞进各种奇怪的地方,它们可能不属于这些地方
for
foreach
可以执行此操作。说“它就是这样设计的”很容易,但现在我真的想知道为什么。我也想知道为什么@Magus-规范分别为\foreach
循环定义了
的形式
for
循环有一个显式的初始化器,可以包含变量声明
foreach
循环还可以声明循环得分标识符<代码>while
循环条件必须是一个
布尔表达式。是的,这很有意义。“它是这样设计的。”但是,它不必这样。如果它是这样设计的,那么基本上会得到两个结果:while循环接受它自己的特殊类型的表达式(不同于所有其他表达式),允许在其中进行这种声明,或变量声明本身必须是计算为值的语句。在这种情况下,您可能会将变量声明塞进各种奇怪的地方,而这些地方可能不属于它们。