iT邦幫忙

DAY 22
5

看範例學C#系列 第 22

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

  • 分享至 

  • xImage
  •  

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

全系列文章列表


上一篇
看範例學C#-21 對話方塊控制項介紹
下一篇
看範例學C#-23 MP3播放
系列文
看範例學C#30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
chiounan
iT邦研究生 1 級 ‧ 2011-10-20 10:08:57

沙發
用功用功
筆記

我要留言

立即登入留言