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)