Skip to content
On this page

foreach 遍历

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

img

运行结果是相同的:

img

使用 foreach 的语法:

img

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

img

了解了 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 的整倍数");
        }
    }
}