dotNETcsharp

C# Learning:迭代语句

2020-04-01  本文已影响0人  月银秋

关于如何使用break语句,continue语句等对迭代语句进行控制请见我的另一篇文章《C# Learning:跳转语句》

while

while语句结构如下:

A
while(M)
    B
C

其中M是一个bool表达式(比如bool类型的变量,比如调用具有bool类型返回值的方法,常见的有“a > 1”)。
程序会这样执行:

  1. 执行A;
  2. 若M是true,则继续执行;否则前往4;
  3. 执行B,然后回到2;
  4. 执行C。

do(do-while)

do语句结构如下:

A
do
    B
while(M)
C

程序会这样执行:

  1. 执行A;
  2. 执行B;
  3. 若M是true,则回到2;否则前往4;
  4. 执行C。
    可以发现,do语句和while语句的区别在于先判断还是先执行,因此do语句最少也会执行过一次循环体,while语句有可能一次都不执行(M一开始就是false)。

for

do语句结构如下:

A
for(B; M; C)
    D
E

程序会这样执行:

  1. 执行A;
  2. 执行B;
  3. 若M是true,则继续执行;否则前往6;
  4. 执行D;
  5. 执行C,回到3;
  6. 执行E。
    其中,B、M、C都不是必填的,B、C不填,则不会执行任何内容,M不填视为true。因此可以发现,for语句可以完全代替while语句。

foreach

foreach语句是专门用于遍历集合的。
foreach语句格式为:

foreach (V v in x)
    A

其中x是要遍历的集合,v是自定义的变量名,可以在A中使用,每次循环会从x中取出下一个并置入v中,而V指定了v的类型。该段代码与以下代码完全等效(编译后结果一致):

{
    E e = ((C)(x)).GetEnumerator();
    try {
        while (e.MoveNext()) {
            V v = (V)(T)e.Current;
            执行A
        }
    }
    finally {
        ... // Dispose e
    }
}

根据x的不同,其中的类型C和finally中的Dispose过程也会不同,这是比较复杂的过程,在此不过多说明了。

上一篇 下一篇

猜你喜欢

热点阅读