C# Learning:迭代语句
2020-04-01 本文已影响0人
月银秋
关于如何使用break语句,continue语句等对迭代语句进行控制请见我的另一篇文章《C# Learning:跳转语句》。
while
while语句结构如下:
A
while(M)
B
C
其中M是一个bool表达式(比如bool类型的变量,比如调用具有bool类型返回值的方法,常见的有“a > 1”)。
程序会这样执行:
- 执行A;
- 若M是true,则继续执行;否则前往4;
- 执行B,然后回到2;
- 执行C。
do(do-while)
do语句结构如下:
A
do
B
while(M)
C
程序会这样执行:
- 执行A;
- 执行B;
- 若M是true,则回到2;否则前往4;
- 执行C。
可以发现,do语句和while语句的区别在于先判断还是先执行,因此do语句最少也会执行过一次循环体,while语句有可能一次都不执行(M一开始就是false)。
for
do语句结构如下:
A
for(B; M; C)
D
E
程序会这样执行:
- 执行A;
- 执行B;
- 若M是true,则继续执行;否则前往6;
- 执行D;
- 执行C,回到3;
- 执行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过程也会不同,这是比较复杂的过程,在此不过多说明了。