看範例學C#-22 參數陣列 (parameter array)

  • 11703
  • 0
  • C#
  • 2011-10-10

摘要:看範例學C#-22 參數陣列 (parameter array)

參數陣列 (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: "小明");//使用具名引數
        }
    }
}

ex22.rar


如有錯誤 歡迎指正