在 C# 中我們可以使用多載(overloading)的特性建立相同名稱,但是不同傳入參數的方法(method),例如:
我們可以這樣呼叫:
假設遇到的情況是需要傳入多個相同資料型態參數,我們可以直接使用 params 定義參數,需要指定為 array 包裹我們傳入參數的型態:
這樣這個方法就可以接收不定的參數數量,從不傳入參數到超級多個參數都可:
傳入參數的處理方式就和平時處理 array 的方式一樣:
不過缺點就是呼叫方法的時候沒有辦法限制「一定要傳入參數」,就會允許沒有傳入參數的情況。
另外使用 params 關鍵字後該方法還是可以有其他傳入參數,只是使用 params 關鍵字的參數需要放在最後面:
所以如果真的有「一定要傳入參數」的需求,可以考慮用下面的方式達成,就是指定第一個參數,再使用 params 接收剩下的,再手動組合:
參考資料:
Microsoft.Learn - Operator overloading - predefined unary, arithmetic, equality and comparison operators
Microsoft.Learn - Method Parameters
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
感謝教學~
回覆刪除