C# 可變長度參數 params

在 C# 中我們可以使用多載(overloading)的特性建立相同名稱,但是不同傳入參數的方法(method),例如:
    
    public void Input(string a)
    {
        
    }
    public void Input(string a, string b)
    {
        
    }
    

我們可以這樣呼叫:
    
        Input("A");
        Input("A", "B");
    

假設遇到的情況是需要傳入多個相同資料型態參數,我們可以直接使用 params 定義參數,需要指定為 array 包裹我們傳入參數的型態:
    
    public void Input(params string[] values)
    {
    }
    

這樣這個方法就可以接收不定的參數數量,從不傳入參數到超級多個參數都可:
    
        Input();
        Input("A");
        Input("A", "B");
        Input("A", "B", "C");
    

傳入參數的處理方式就和平時處理 array 的方式一樣:
    
    public void Input(params string[] values)
    {
        Console.WriteLine($"傳入參數數量: {values.Length}");
        foreach (var value in values)
        {
            Console.WriteLine(value);
        }
    }
    

不過缺點就是呼叫方法的時候沒有辦法限制「一定要傳入參數」,就會允許沒有傳入參數的情況。

另外使用 params 關鍵字後該方法還是可以有其他傳入參數,只是使用 params 關鍵字的參數需要放在最後面:
    
    public void Input(int a, params string[] values)
    {
    }
    

所以如果真的有「一定要傳入參數」的需求,可以考慮用下面的方式達成,就是指定第一個參數,再使用 params 接收剩下的,再手動組合:
    
    public void Input(string first, params string[] values)
    {
        var result = new List<string> {first};
        result.AddRange(values);
    }
    



參考資料:
Microsoft.Learn - Operator overloading - predefined unary, arithmetic, equality and comparison operators
Microsoft.Learn - Method Parameters

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com