一周学会 C# (语句三)
C# 才鸟( QQ:249178521 )
9.for 语句
· **_ for _ ** ** ** ** 语句 ** ** **
w ** for ** ** 块中声明的变量是局部的,只在 ** ** for ** ** 块中有效 ** ** **
w ** 可以省略 ** ** for ** ** 语句中的任何一部分 ** ** **
** for (int digit = 0; digit ** ** != ** ** 10; digit++) **
** { **
** Console.Write("{0} ", digit); **
** } **
** // ** ** 屏幕上显示 ** ** 0 1 2 3 4 5 6 7 8 9 **
在 for 块中声明的变量只在 for 块中有效。例如:
for (int digit = 0; digit != 10; digit++)
{ ... }
Console.WriteLine(digit); // 错误, digit 只在 for 块中有效
可以通过逗号在 for 语句中声明多个变量和多个变化语句:
for (int i = 0, j = 0; i + j < 20; i++, j++)
{ ... }
10.foreach
· ** 来源于 ** ** shell, VB, PERL **
w ** 用于任一集合,包括数组 ** ** **
** using System; **
** sealed class Foreach **
** { **
** static void Main (string[] args) **
** { **
** foreach (string arg in args) **
** { **
** Console.Write("{0} ", arg); **
** } **
** Console.WriteLine(); **
** } **
** } **
把以上程序在 windows 命令行进行编译: ** C:\Sharp>csc Foreach.cs **
** 然后键入: ** ** C:\Sharp>Foreach 0 1 2 3 4 5 6 7 8 9 **
** 屏幕上显示 ** ** 0 1 2 3 4 5 6 7 8 9 **
foreach 用来遍历集合或数组中的元素。
11.foreach 的几点注意
· **_ foreach _ ** ** ( __ ** ** 类型 ** **_ _ ** ** 标识符 ** **_ in _ ** ** 表达式 ** **_ _ ** ** ) **
w ** 类型和标识符声明一个循环变量 ** ** **
w ** 循环变量隐含为 ** **_ readonly _ ** ** , ** ** 不能有 ** **_ ref _ ** ** ** ** 或 ** **_ out _ ** ** ** ** 修饰 ** ** **
w ** 表达式是可列举的集合 **
** sealed class ForeachTranslation **
** { **
** static void Example(MyWibbleCollection wibbles) **
** { **
** MyEnumerator pos = wibbles.GetEnumerator(); **
** while (pos.MoveNext()) **
** { **
** Wibble current = pos.Current; **
** Console.Write("{0} ", current); **
** } **
** } **
** } **
集合类型的定义规则:(假设集合的名字是 C )
C 必须定义一公有函数 GetEnumerator(), 该函数的返回值是一结构类型或是一类类型或是一接口类型(假设返回值的名字是 E ) ;
返回值 E 的定义规则:
ü E 包含一公有函数 MoveNext() ,用来使 E 指向集合中的下一个元素,返回值的类型是 bool 。
ü E 包含一公有属性 Current ,用来读取当前值。这个属性的类型是集合元素的类型。
12.break/continue
break 用来结束一个循环, continue 用来重新启动一个循环。
13. 找错
** { **
** for (int i = 0; i != 12; i++) 1 **
** { **
** ... **
** } **
** int i = 0; **
** } **
** for (int i = 0, i == 12, i++) 2 **
** { **
** ... **
** } **
** foreach (int i in array) 3 **
** { **
** i++; **
** } **
第 1 个程序的错误:不能在一个父块和一个子块中声明两个相同名字的变量
第 2 个程序的错误:不是使用逗号分割 for 语句的三个部分,而应使用分号。
for 语句的判断条件应为逻辑语句。
第 3 个程序的错误: foreach 的循环变量是只读的