数组传递参数的话,如果直接传引用过去。对数组参数的操作会改变原始变量的值。如果不想影响原始变量的话,需要在函数里面定义新的局部数组变量。赋值给局部数组变量,对局部数组变量进行操作。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestYinTong { class Program { public static void SetArrayA(int[] numbers) { for (int n = 0; n < numbers.Length; n++) { numbers[n] += 1; Console.WriteLine("numbers[" + n + "]=" + numbers[n]); } } public static void SetArrayB(int[] numbers) { int[] numbersB = {0, 0}; Array.Copy(numbers, numbersB, numbers.Length); //和memcpy中dest、src的位置相反 for (int n = 0; n < numbersB.Length; n++) { numbersB[n] += 1; Console.WriteLine("numbersB[" + n + "]=" + numbersB[n]); } } public static void PrintArray(int[] numbers) { for (int n = 0; n < numbers.Length; n++) { Console.WriteLine("numbers[" + n + "]=" + numbers[n]); } } public static void Main(string[] args) { int[] numbers = {3, 4}; Console.WriteLine("调用方法B之后,输出数组元素:"); SetArrayB(numbers); Console.WriteLine("调用方法B之后,原始数组元素:"); PrintArray(numbers); Console.WriteLine("调用方法A之后,输出数组元素:"); SetArrayA(numbers); Console.WriteLine("调用方法A之后,原始数组元素:"); PrintArray(numbers); ConsoleKeyInfo i = Console.ReadKey(true); } } }
程序运行结果: