参数数组 (parameter array) 允许向方法传递可变数量的实参。参数数组使用 params 修饰符声明。只有方法的最后一个参数才可以是参数数组,并且参数数组的类型必须是一维数组类型。System.Console 类的 Write 和 WriteLine 方法就是参数数组用法的很好示例。它们的声明如下。
public class Console
{
public static void Write(string fmt, params object[] args) {...}
public static void WriteLine(string fmt, params object[] args) {...}
...
}
在使用参数数组的方法中,参数数组的行为完全就像常规的数组类型参数。但是,在具有参数数组的方法的调用中,既可以传递参数数组类型的单个实参,也可以传递参数数组的元素类型的任意数目的实参。在后一种情况下,将自动创建一个数组实例,并使用给定的实参对它进行初始化。示例:
Console.WriteLine("x={0} y={1} z={2}", x, y, z);
等价于写下面的语句。
object[] args = new object[3];
args[0] = x;
args[1] = y;
args[2] = z;
Console.WriteLine("x={0} y={1} z={2}", args);
1、若形参表中含一个参数数组,则该参数数组必须位于形参列表的最后。
class Program
{
static void Speak(int str1,params int[] array)
{
Console.WriteLine(array.Length);
}
static void Main(string[] args)
{
Speak(3, 1, 2);//打印2
Speak(4, 1, 2, 3); // 打印3
}
}
2、不允许将params修饰符与ref和out修饰符组合起来使用。
3、参数数组必须是一维数组。
4、与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量。
class Program
{
static void Speak(int str1,params int[] array)
{
Console.WriteLine(array.Length);
}
static void Main(string[] args)
{
int[] arr = { 1, 2, 3, 4 };
Speak(4, 1, 2, 3); // 打印3
Speak(4, arr); // 打印4
}
}