參數陣列範例
參數陣列 (parameter array) 也稱為 不定長度引數(Variable-Length Argument)
有時我們並無法事先得知要傳遞的參數個數,所以這時候最適合使用不定長度引數參數陣列 (parameter array)
參數陣列使用規則
每個程式只能定義一個引數為參數陣列
參數陣列必須是最後一個引數
必須以傳值(by val)方式傳遞
參數陣列是選擇性的(可設定參數值也可不設定參數值)
本例的average 即是一個參數陣列方法
avg 使用四個1~100的不重複亂數
avg2使用50,100 這兩個固定值
結果 顯示 avg 加總的平均值 跟 avg2 加總的平均值,因為是參數陣列,
所以參數長度不需固定
具名引數:直接根據參數的名稱將參數值輸入副程式中運算
宣告選擇性參數 必須注意下面三件事情
選擇性參數必須定義在參數列中所有必要參數的後面
每個選擇性參數都必須要指定預設值
選擇性參數的預設值必須為常數
如果要跳過某個選擇性參數輸入資料的話,注意不可使用逗號(會發生編譯錯誤),而是要使用 「具名引數」 的技巧
因為上面條件,得知參數陣列與宣告選擇性參數的規則是互相衝突的,所以在不能同時使用在同一個方法內。
以下為本例程式碼及註解
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ex22
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//參數陣列
private static int average(params int[] nums)
{
int total = 0;
foreach (int no in nums)
{
total += no;
}
return total / nums.Length; // nums.length 表示nums陣列的元素個數
}
//選擇性參數
public string Printdata(int age, string city = "taipei", string name = "將中正")
{
return "藉貫:" + city + ",姓名:" + name + ",年齡:" + age;
}
private void button1_Click(object sender, EventArgs e)
{
string s = "";
int[] loto = new int[100]; //將所有數字(1~100)放入陣列loto中
for (int i = 0; i <= 99; i++)
{
loto[i] = i + 1;
}
int[] x = new int[4]; //宣告要取多少個數字
Random r = new Random();
for (int j = 0; j <= 3; j++)
{
int temp = r.Next(1, 100); //隨機抓取一組數字放入x[]陣列中
x[j] = loto[temp]; //否則將亂數產生之數字放入x[]陣列中
s += x[j].ToString() + ",";//每個數字以,分隔
loto[temp] = 0; //將以使用之數字以零取代
textBox1.Text = s.Substring(0, s.Length - 1);//去除最後一個逗號
}
int avg = average(x);
int avg2 = average(50, 100);//參數陣列以逗號分隔參數值
label1.Text = "avg=" + avg.ToString() ;
label4.Text = "average(50, 100)=" + avg2.ToString();
label2.Text = Printdata(18);
label3.Text = Printdata(20, name: "小明");//使用具名引數
}
}
}