1.修饰必须是一维数组
1 public static void Test(params int a) 2 { 3 a = 10; 4 } 5 //运行报错:
2.可变参数要放到最后一个,所以一个方法中只能有一个
3.不能依赖重载方法
4.不允许parmas数组指定 ref 或者 out
5.非parm方法总是优先param方法如 sum(parms int【】arr) 和重载 sum()
1 static void Main(string[] args) 2 { 3 //调用的是由param方法 4 int num = Sum(2, 3); 5 Console.WriteLine(num); 6 7 //方法重载,优先调用没有params方法 8 num = Sum(2); 9 Console.WriteLine(num); 10 Console.ReadKey(); 11 } 12 13 static int Sum(int a,params int [] arr){ 14 15 int result = a; 16 for (int i = 0; i < arr.Length; i++) 17 { 18 result += arr[i]; 19 } 20 Console.WriteLine("有param方法"); 21 return result; 22 } 23 static int Sum(int a) 24 { 25 Console.WriteLine("没有params方法"); 26 return a; 27 }
6.parms即使没有传入参数,方法内部仍会new一个元素个数为0的数组,效率略差
1 static void Main(string[] args) 2 { 3 //调用的是由param方法,params对应的输入0个参数 4 int num = Sum(2); 5 Console.WriteLine(num); 6 Console.ReadKey(); 7 } 8 9 static int Sum(int a,params int [] arr){ 10 11 int result = a; 12 for (int i = 0; i < arr.Length; i++) 13 { 14 result += arr[i]; 15 } 16 17 //输出结果0,那么说明调用方法的时候new了一个以为数组arr,长度为0 18 Console.WriteLine(arr.Length); 19 return result; 20 }
7.数组可以是任意类型,如果要接收任意类型的参数,只要数组类型定位object即可
存入的是Object类型,会拆箱装箱
例题:
1 //求任意长度数组的最大值,整数类型 2 static int GetMax(params int[] arr) 3 { 4 if (arr.Length <0) 5 { 6 return -1; 7 } 8 int max = arr[0]; 9 for (int i = 1; i < arr.Length; i++) 10 { 11 if (max < arr[i]) 12 { 13 int temp = max; 14 max = arr[i]; 15 arr[i] = temp; 16 } 17 18 } 19 return max; 20 21 }