C#中用foreach语句遍历数组及将数组作为参数的用法
对数组使用foreach
C#提供foreach语句。该语句提供一种简单、明了的方法来循环访问数组或任何可枚举集合的元素。foreach语句按数组或集合类型的枚举器返回的顺序处理元素,该顺序通常是从第0个元素到最后一个元素。例如,以下代码创建一个名为numbers的数组,并使用foreach语句循环访问该数组:
int[]numbers={4,5,6,1,2,3,-2,-1,0}; foreach(intiinnumbers) { System.Console.Write("{0}",i); } //Output:456123-2-10
借助多维数组,你可以使用相同的方法来循环访问元素,例如:
int[,]numbers2D=newint[3,2]{{9,99},{3,33},{5,55}}; //Orusetheshortform: //int[,]numbers2D={{9,99},{3,33},{5,55}}; foreach(intiinnumbers2D) { System.Console.Write("{0}",i); }
输出:
999333555
但对于多维数组,使用嵌套的for循环可以更好地控制数组元素。
将数组作为参数传递
数组可作为实参传递给方法形参。由于数组是引用类型,因此方法可以更改元素的值。
将一维数组作为参数传递
可以将初始化的一维数组传递给方法。例如,下面的语句将数组发送到print方法。
int[]theArray={1,3,5,7,9}; PrintArray(theArray);
下面的代码显示print方法的部分实现。
voidPrintArray(int[]arr) { //Methodcode. }
您可以在一个步骤中初始化和传递新数组,如下面的示例所示。
PrintArray(newint[]{1,3,5,7,9});
示例
说明
在下面的示例中,将初始化一个字符串数组并将其作为参数传递到字符串的PrintArray方法。该方法显示数组的元素。接下来,调用ChangeArray和ChangeArrayElement方法以演示通过值发送数组参数时不会阻止更改这些数组元素。
代码
classArrayClass { staticvoidPrintArray(string[]arr) { for(inti=0;i<arr.Length;i++) { System.Console.Write(arr[i]+"{0}",i<arr.Length-1?"":""); } System.Console.WriteLine(); } staticvoidChangeArray(string[]arr) { //Thefollowingattempttoreversethearraydoesnotpersistwhen //themethodreturns,becausearrisavalueparameter. arr=(arr.Reverse()).ToArray(); //ThefollowingstatementdisplaysSatasthefirstelementinthearray. System.Console.WriteLine("arr[0]is{0}inChangeArray.",arr[0]); } staticvoidChangeArrayElements(string[]arr) { //Thefollowingassignmentschangethevalueofindividualarray //elements. arr[0]="Sat"; arr[1]="Fri"; arr[2]="Thu"; //ThefollowingstatementagaindisplaysSatasthefirstelement //inthearrayarr,insidethecalledmethod. System.Console.WriteLine("arr[0]is{0}inChangeArrayElements.",arr[0]); } staticvoidMain() { //Declareandinitializeanarray. string[]weekDays={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; //PassthearrayasanargumenttoPrintArray. PrintArray(weekDays); //ChangeArraytriestochangethearraybyassigningsomethingnew //tothearrayinthemethod. ChangeArray(weekDays); //Printthearrayagain,toverifythatithasnotbeenchanged. System.Console.WriteLine("ArrayweekDaysafterthecalltoChangeArray:"); PrintArray(weekDays); System.Console.WriteLine(); //ChangeArrayElementsassignsnewvaluestoindividualarray //elements. ChangeArrayElements(weekDays); //Thechangestoindividualelementspersistafterthemethodreturns. //Printthearray,toverifythatithasbeenchanged. System.Console.WriteLine("ArrayweekDaysafterthecalltoChangeArrayElements:"); PrintArray(weekDays); } }
输出:
SunMonTueWedThuFriSat arr[0]isSatinChangeArray. ArrayweekDaysafterthecalltoChangeArray: SunMonTueWedThuFriSat arr[0]isSatinChangeArrayElements. ArrayweekDaysafterthecalltoChangeArrayElements: SatFriThuWedThuFriSat
将多维数组作为参数传递
可采用与传递一维数组相同的方式将初始化的多维数组传递给方法。
int[,]theArray={{1,2},{2,3},{3,4}}; Print2DArray(theArray);
下面的代码显示print方法的部分声明,该方法接受一个二维数组作为其参数。
voidPrint2DArray(int[,]arr) { //Methodcode. }
您可以在一个步骤中初始化和传递新数组,如下面的示例所示。
Print2DArray(newint[,]{{1,2},{3,4},{5,6},{7,8}});
示例
说明
在下面的示例中,将初始化一个二维整数数组并将其传递到Print2DArray方法。该方法显示数组的元素。
代码
classArrayClass2D { staticvoidPrint2DArray(int[,]arr) { //Displaythearrayelements. for(inti=0;i<arr.GetLength(0);i++) { for(intj=0;j<arr.GetLength(1);j++) { System.Console.WriteLine("Element({0},{1})={2}",i,j,arr[i,j]); } } } staticvoidMain() { //Passthearrayasanargument. Print2DArray(newint[,]{{1,2},{3,4},{5,6},{7,8}}); //Keeptheconsolewindowopenindebugmode. System.Console.WriteLine("Pressanykeytoexit."); System.Console.ReadKey(); } }
输出:
Element(0,0)=1 Element(0,1)=2 Element(1,0)=3 Element(1,1)=4 Element(2,0)=5 Element(2,1)=6 Element(3,0)=7 Element(3,1)=8