C# 这种循环在c语言中是如何工作的#

C# 这种循环在c语言中是如何工作的#,c#,.net,C#,.net,最近,我在一本书中读到了这段代码。您能否定义此代码的方法以及此代码的工作方式 int i = 0; for (; i != 10; ) { Console.WriteLine(i); i++; } 它循环 因为您已经在上面设置了i=0,所以他们省略了for循环的部分。此外,由于您在末尾递增变量,因此他们也忽略了这一点 他们基本上只是把for循环变成了while循环 它可能会更优雅,因为: int i = 0; while( i != 10 ) { Con

最近,我在一本书中读到了这段代码。您能否定义此代码的方法以及此代码的工作方式

int i = 0; 
for (; i != 10; ) 
{ 
    Console.WriteLine(i); 
    i++; 
}
它循环

因为您已经在上面设置了
i=0
,所以他们省略了
for
循环的
部分。此外,由于您在末尾递增变量,因此他们也忽略了这一点

他们基本上只是把for循环变成了while循环

它可能会更优雅,因为:

int i = 0; 
while( i != 10 ) 
{ 
    Console.WriteLine(i); 
    i++; 
}

如果以正常形式更容易看到,那么它几乎等同于:

for (int i = 0; i != 10; i++) 
{ 
    Console.WriteLine(i); 
}

除了在循环完成后为用户保留可用的
i
之外,它的范围不仅仅限于
for
循环。

它与此循环相同:

for (int i = 0; i != 10; i++) {
  Console.WriteLine(i); 
}
除此之外,变量
i
是在循环之外声明的,因此它的范围更大

for
循环中,第一个参数是初始化,第二个是条件,第三个是增量(实际上可以是任何值)。这本书展示了初始化和增量是如何移动到代码中实际执行它们的位置的。循环也可以显示为等效的
,而
循环:

int i = 0;
while (i != 10) {
  Console.WriteLine(i);
  i++;
}

这里变量
i
也在循环外声明,因此作用域更大。

您使用的是“for”,比如“while”

此代码可以重写(在您的代码段上下文中,它不等同于前面所述的内容),如下所示:

基本上,初始化表达式和增量表达式已从for循环表达式中删除,这完全是可选的。

它与:

for (int i = 0; i != 10; i++) {
    Console.WriteLine(i);
}
请不要这样写代码。
这很难看,而且违背了for循环的目的。

for语句在C#spec中定义为

for(对于初始值设定项;对于条件;对于迭代器)嵌入语句

对于初始值设定项、条件和迭代器的所有三个都是可选的。代码之所以有效,是因为这些部分不是必需的


出于好奇:如果省略了For条件,循环的行为就好像有一个For条件生成了true。因此,它将充当无限循环,需要跳转语句离开(break、goto、throw或return)。

因为
inti
是在顶部声明的,所以它不在for循环中。 这很像

for(int i = 0; i!=10; i++)
{
   /// do your code
}

有趣,以前没见过…@Yoda-可能是因为它的形式不好。合法,但形式不好。奇怪的是你在这个问题上没有得票+我将专注于foreach和对集合和枚举的迭代;这是更常见的(也更惯用的)C#。可能有这样一种情况,你为什么想做这样的事情,但我现在只想到任何一种。对我来说,这是一种糟糕的代码味道,我当然不会这样构造我的循环。除了在循环外初始化I以赋予它更大的范围外,它还允许增量在循环内的条件下进行,例如I+=2或I-或其他什么,无需对for循环第三部分中指定的内容进行补偿。但是是的,和我之前一样think@Jacob,+1的范围捕获,我甚至没有想过。我会注意到你发布的内容是不等价的,有一个范围的差异。
for(int i = 0; i!=10; i++)
{
   /// do your code
}