foreach 遍历
for 循环使我们可以通过索引访问数组元素;而 foreach 循环则可以不依赖索引而读取每一个数组元素。下面的示例代码声明了一个整型数组,然后通过两种方法打印数组元素:

运行结果是相同的:
使用 foreach 的语法:

需要解释一下 ④ ,如上面的示例代码,迭代变量 x 只能用于读取数组 num 中的值,但是不能给数组元素赋值,如果尝试给 x 赋值,则会有下面的错误提示:

了解了 foreach 循环的语法,你可能会有疑问:好像 foreach 循环能做的 for 都能做, foreach 存在的意义是什么呢?其实,C#中还存在一些类似于数组的数据组织方式,它们中有一些是没有元素索引的,对于这些元素,只能通过 foreach 遍历。关于那些更高级的对象,我们留待后面的课程介绍。
任务
请在右边代码第 13 行输入 foreach() 结构头部,使得程序能够打印数组的所有元素。
代码
csharp
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
class Program
{
static void Main(string[] args)
{
string[] t =new string[]{"C","Sh","a","rp"};
//遍历字符串数组 t
foreach (string x in t)
{
Console.Write(x);
}
}
}
}编程练习
查找算法的另一种应用,是检查一组数据中是否包含符合条件的元素,也就是要给出“有”或“没有”的结论。
要解决这种问题,首先要声明一个“开关变量”,用来记录查找的状态;通常,我们把开关变量初始化为 false,表示没有找到,循环中如果发现了符合条件的元素,则给变量赋值为 true,并结束查找。循环结束后,就可以判断开关变量:true 表示“有”,false 表示“没有”。
任务 1
程序中有一个 int 型数组,包含了若干整数。请检查其中是否有“7 的整倍数”。运行结果如下:
没有7的整倍数
代码 1
csharp
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
class Program
{
static void Main(string[] args)
{
//声明整型数组,保存一组整数
int[] num = new int[] { 3,34,43,2,11,19,30,55,20};
//请完善代码,判断数组中有没有 7 的整倍数
bool flag = false;
foreach (int item in num) {
if (item % 7 == 0) {
flag = true;
break;
}
}
Console.WriteLine(flag ? "有 7 的整倍数": "没有 7 的整倍数");
}
}
}