PARAMS

params 允许方法参数接收可变数量的参数,即允许该参数为零,一个或多个参数。

static int AddAll(params int[] numbers)
{
    int total = 0;
    foreach (int number in numbers)
    {
        total += number;
    }
    
    return total;
}

现在可以使用典型的 int 参数列表或 int 数组来调用此方法。

AddAll(5, 10, 15, 20);                // 50
AddAll(new int[] { 5, 10, 15, 20 });  // 50

params 必须最多出现一次,如果使用,它必须在参数列表中的最后一个,即使后续类型与数组的类型不同。

使用 params 关键字时重载函数时要小心。在尝试使用 params 重载之前,C#更喜欢匹配更具体的重载。例如,如果你有两种方法:

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)