c# 方法的可變引數 params
今天筆者看了網上的很多關於基礎的可變引數的用法,說實話,以我的感覺很多人都沒有把這個問題說清楚。有一些所謂大神更是將陣列作為實參傳遞給一個可變引數作為可變引數的使用案例來講。雖然這也是可以的,但是遇到像我這樣的新手不禁會問:“如果只是將陣列傳遞給一個可變引數陣列,那麼完全不必用params關鍵字修飾,直接將實引數組傳遞給形引數組不就行了嗎,這怎麼又能說明可變引數的應用必要性呢。”。
筆者說一下自己理解的可變引數的應用場景,可變引數(陣列)不僅可以將陣列傳入,也可以在呼叫的時候用形參直接賦值的形式傳入,在方法中還是會當成一個數組處理,這才是可變引數的先進性。
下面筆者進行舉例,比如我們要定義一個方法,用來計算傳入的所有引數的最大值。
這就涉及到一個問題,既然是要計算傳入的所有引數的最大值,那麼引數的個數就可多可少,如果我們不想用傳入陣列進行計算,而想讓這個方法根據傳入的資料的多少自動計算呢。這大概就是可變引數的應用場景了。
程式碼如下:
//定義計算最大值的函式,引數可變
public int Max(params int[] nums)
{
int maxNum=nums[0];//將陣列中的第一個值設定為預設最大值
//迴圈比較陣列中的從第二個值起是否大於預設最大值,如果大於預設最大值則將新的最大值賦值給maxNum
for(int i=1;i<nums.Length;i++)
{
if(nums[i]>maxNum)
{
maxNum=nums[i]
}
}
//返回比較到最後的最大值
return maxNum;
}
以上的這個方法我們在呼叫的時候就可以直接傳入資料而不是傳入一個數組進行呼叫。
下面是使用這個函式的案例:
//列印傳入的所有資料的最大值
Console.WriteLine(Max(1,2,3,4,5,6,7,8,9,10));
輸出的結果肯定是:10。
可變引數就是像上面這樣使用的,當我們在定義函式的時候對陣列使用了關鍵字params,陣列就會變成一個可變引數,在呼叫的時候我們傳入的資料會形成一個數組,在呼叫的時候我們就可以傳入無論多少個元素。
當然,可變引數也有其限定,就是當我們定義的方法有多個引數的時候可變形參必須定義在最後,不然我們在呼叫的時候程式也不知道將哪些元素作為可變引數處理;還有可變引數只能是一維陣列,不能是多維度的。
原文:https://blog.csdn.net/qq_38507850/article/details/79178993