params 允许方法参数接收可变数量的参数,即零,该参数允许一个或多个参数。
static int AddAll(params int[] numbers) { int total = 0; foreach (int number in numbers) { total += number; } return total; }
现在可以使用典型的int参数列表或整数数组调用此方法。
AddAll(5, 10, 15, 20); // 50 AddAll(new int[] { 5, 10, 15, 20 }); // 50
params必须最多出现一次,并且如果使用,它必须位于参数列表的最后,即使随后的类型与数组的类型不同。
使用params关键字重载函数时要小心。C#倾向于在尝试使用重载之前匹配更具体的重载params。例如,如果您有两种方法:
static double Add(params double[] numbers) { Console.WriteLine("Add with array of doubles"); double total = 0.0; foreach (double number in numbers) { total += number; } return total; } static int Add(int a, int b) { Console.WriteLine("Add with 2 ints"); return a + b; }
然后,在尝试params重载之前,特定的2参数重载将优先。
Add(2, 3); //prints "Add with 2 ints" Add(2, 3.0); //prints "Add with array of doubles" (doubles are not ints) Add(2, 3, 4); //prints "Add with array of doubles" (no 3 argument overload)