《随笔十三》——C#中的 “ foreach 语句”

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34536551/article/details/84333650

目录

迭代变量是只读的

交错数组使用foreach 循环


 ● foreach 语句允许我们依次访问某个序列中的元素,并且不存在访问非法元素的危险。 不需要考虑该序列中有多少个元素, 并可以确保将在循环中使用每个元素。  语法为:

foreach (Type Indentifier in ArrayName)
{

     //Satement
}

或者

foreach (var Indentifier in ArrayName)
{

     //Satement
}

迭代变量是临时的, 并且和数组中的元素的类型相同。● 注意: 每次迭代都会重新定义迭代变量,Identifier部分的变量会被初始化为 ArrayName 部分的下一个元素的值(或者说: 并将其初始化序列中的下一个值)。

然后执行语句主体,在该主体中,我们可以把迭代变量作为序列中的元素只读别名。

在主体执行之后, foreach 语句 选择该序列中的下一个元素并重复处理。


迭代变量是只读的


对于值类型数组, 我们在用迭代变量表示数组元素的时候, 我们不能改变它:

            int[] arr = { 0, 1, 2, 3 };
            foreach(var tt  in arr)
            {
                ++tt;   //错误,不能改变迭代变量的值
            }

对于引用类型数组,我们也不能该变迭代变量, 但是迭代变量只是保存了数据的引用, 而不是数据本身。 因此,我们虽然不能改变引用,但是我们可以通过迭代变量改变引用的数据。

namespace HelloWorld_Console
{
    class MyClass
    {
        public int MyField = 0;
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyClass[] mcArray = new MyClass[4];
            for (int i = 0; i < mcArray.Length; ++i)
            {
                mcArray[i] = new MyClass();  // 创建类对象
                mcArray[i].MyField = i;   // 创建字段
            }
            foreach (MyClass item in mcArray)
            {
                item.MyField += 10;
                WriteLine(item.MyField);
            }
            ReadKey();
        }
    }
}

输出结果为:

10
11
12
13

交错数组使用foreach 循环


一个交错数组是数组的数组, 我们必须为交错数组中的每一个维度使用独立的foreach 语句。 foreach 语句必须嵌套以确保每一个嵌套数组都被正确处理。

   int[][] myInt = new int[3][] { new int[] { 1, 2, 3 }, new int[] { 1 }, new int[] { 1, 2 } }; //正确
            foreach (int[] divisor in myInt) //处理顶层数组
            {
                foreach (int temp in divisor)  //处理第子数组
                {
                    WriteLine(temp);
                }
            }

在该代码中, 第一个foreach 语句遍历了顶层数组  myInt 第一个子数组, 内部的foreach语句处理了子数组的,每一个元素。

猜你喜欢

转载自blog.csdn.net/qq_34536551/article/details/84333650