版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34536551/article/details/84333650
目录
● 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语句处理了子数组的,每一个元素。