C# 数组(foreach语句)

发布于:2025-06-23 ⋅ 阅读:(16) ⋅ 点赞:(0)

foreach语句

foreach语句允许我们连续访问数组中的每一个元素。其实它是一个比较通用的结构,可以
和其他集合类型一起使用——但是本节只会讨论它和数组的使用。

有关foreach语句的重点如下所示。

  • 迭代变量是临时的,并且和数组中元素的类型相同。foreach语句使用迭代变量来相继表
    示数组中的每一个元素。
  • foreach语句的语法如下,其中
    • Type是数组中元素的类型。我们可以显式提供它的类型,也可以使用va让其成为隐
      式类型并通过编译器来推断,因为编译器知道数组的类型。
    • ldentifier是迭代变量的名字。
    • ArrayName是要处理的数组的名字。
    • Satement是要为数组中的每一个元素执行一次的单条语句或语句块。

image

在之后的内容中,有时会使用隐式类型,而有时又会使用显式类型,这样我们就可以看到使
用的确切类型,但是两种形式的语法是等价的。
foreach语句以如下方式工作。

  • 从数组的第一个元素开始并把它赋值给迭代变量。
  • 然后执行语句主体。在主体中,我们可以把迭代变量作为数组元素的只读别名。
  • 在主体执行之后,foreach语句选择数组中的下一个元素并重复处理。
    这样,它就循环遍历了数组,允许我们逐个访问每一个元素。例如,如下代码演示了foreach
    语句和一个具有4个整数的一维数组的使用。
  • foreach语句的主体WriteLine语句为数组的每一个元素执行一次。
  • 第一次遍历时,迭代变量item就有了数组中第一个元素的值。相继执行后,它就有了数
    组中下一个元素的值。

image

迭代变量是只读的

由于迭代变量的值是只读的,所以它不能改变。但是,这对于值类型数组和引用类型数组而
言效果不一样。
对于值类型数组,这意味着在用迭代变量表示数组元素的时候,我们不能改变它们。例如,
在如下的代码中,尝试改变迭代变量中的数据产生了编译时错误消息:

image
对于引用类型数组,我们仍然不能改变迭代变量,但是迭代变量只是保存了数据的引用,而
不是数据本身。因此,虽不能改变引用,但我们可以通过迭代变量改变数据。
如下代码创建了一个有4个MyClass对象的数组并将其初始化。在第一个foreach语句中,
改变了每一个对象中的数据。在第二个foreach语句中,从对象读取改变后的值。

class MyClass{
    public int MyField=0;
}

class Program{
    static void Main(){
        MyClass[] mcArray=new MyClass[4];    //创建数组
        for(int i=0;i<4;i++)
        {
            mcArray[i]=new MyClass();        //创建类对象
            mcArray[i].MyField=i;            //设置字段
        }
        foreach(MyClass item in mcArray)
            item.MyField+=10;                //改变数据

        foreach(MyClass item in mcArray)
            Console.WriteLine($"{item.MyField}");//读取改变的数据
    }
}

foreach语句和多维数组

在多维数组中,元素的处理次序是最右边的索引号最先递增。当索引从0到长度减1时,开
始递增它左边的索引,右边的索引被重置成0。

矩形数组的示例

如下代码演示了将foreach语句用于矩形数组:

class Program
{
    static void Main()
    {
        int total=0;
        int[,] arr1={{10,11},{12,13}}

        foreach(var element in arr1)
        {
            total+=element;
            Console.WriteLine($"Element:{element},Current Total:{total}");
        }
    }
}

交错数组的示例

交错数组是数组的数组,所以我们必须为交错数组中的每一个维度使用独立的foreach语句。
foreach语句必须嵌套以确保每一个嵌套数组都被正确处理。
例如,在如下代码中,第一个foreach语句遍历了顶层数组(arr1),选择了下一个要处理
的子数组。内部的foreach语句处理了子数组的每一个元素。


网站公告

今日签到

点亮在社区的每一天
去签到