C#方法params參數(shù)用法及說明
一、params參數(shù)核心定義(必背,對(duì)應(yīng)原代碼注釋)
//params int[] a: //params:參數(shù)列表 允許傳遞不定數(shù)量的參數(shù), //int[] a;參數(shù)a就是整型的容器,可以存儲(chǔ)多個(gè)整型的數(shù) // a.Length 就是容器的長(zhǎng)度 //string[] a 存放字符串的容器 //bool[] b 存放bool的容器
? 必記知識(shí)點(diǎn)(核心,直接背):
params是C#中用于實(shí)現(xiàn)不定數(shù)量參數(shù)傳遞的關(guān)鍵字,核心作用是:允許調(diào)用方法時(shí),傳遞任意數(shù)量(0個(gè)、1個(gè)、多個(gè))的同類型參數(shù)。
params參數(shù)本質(zhì)是“數(shù)組”:params后面必須跟“數(shù)組類型”(如int[]、string[]、bool[]),該數(shù)組就是存儲(chǔ)所有傳遞參數(shù)的“容器”。
核心屬性:數(shù)組名.Length(如a.Length),表示容器中存儲(chǔ)的參數(shù)個(gè)數(shù)(即傳遞的參數(shù)數(shù)量)。
常見場(chǎng)景:params int[](存整型參數(shù))、params string[](存字符串參數(shù))、params bool[](存bool類型參數(shù)),本質(zhì)都是數(shù)組。
二、params參數(shù)的語法(必默寫,易錯(cuò)重點(diǎn))
1. 方法定義語法(硬性要求)
// 格式:修飾符 static 返回值類型 方法名(params 數(shù)組類型 數(shù)組名)
// 核心要求:params必須修飾數(shù)組,且只能修飾一個(gè)參數(shù),且該參數(shù)必須是方法的最后一個(gè)參數(shù)
// 場(chǎng)景1:僅params參數(shù)(無其他參數(shù))
public static void Test1(params int[] a)
{
//Console.WriteLine(a.Length) ; // 最大下標(biāo)= a.Length-1;
//Console.WriteLine(a[0]); //訪問每一個(gè)參數(shù)時(shí)候 通過參數(shù)的下標(biāo)進(jìn)行訪問, 下標(biāo)從0開始
//Console.WriteLine(a[a.Length-1]);//取最后一個(gè)參數(shù);
//取出所有的參數(shù)(循環(huán)遍歷)
for (int i = 0; i < a.Length; i++)
{
Console.WriteLine(a[i]);
}
}
// 場(chǎng)景2:params參數(shù)+普通參數(shù)(params必須在最后)
public static void Test2(int a,int b,params int[] c)// a =10 ,b=20;
{
Console.WriteLine(c[0]);//30(訪問params數(shù)組的第一個(gè)元素)
}? 必記要點(diǎn)(核心,標(biāo)紅重點(diǎn)):
params關(guān)鍵字必須修飾數(shù)組類型(如int[]、string[]),不能修飾單個(gè)值類型(如int、string),否則報(bào)錯(cuò)。
一個(gè)方法中只能有一個(gè)params參數(shù),不能同時(shí)定義多個(gè)params參數(shù)(如public static void Test(params int[] a, params string[] b) 報(bào)錯(cuò))。
params參數(shù)必須是方法的最后一個(gè)參數(shù)(如Test2中,params int[] c在int a、int b之后),放在前面會(huì)報(bào)錯(cuò)。
2. 方法調(diào)用語法(必記,結(jié)合原代碼)
static void Main(string[] args)
{
// 場(chǎng)景1:調(diào)用僅params參數(shù)的方法(傳遞任意數(shù)量的同類型參數(shù))
Test1(1);//a.Length的長(zhǎng)度1(傳遞1個(gè)參數(shù))
Test1(1, 2);//a.Length=2(傳遞2個(gè)參數(shù))
Test1(1, 2,4,4,4,4,4,4,4,4,44);//a.Length=11(傳遞11個(gè)參數(shù))
Test1();//允許傳遞0個(gè)參數(shù),此時(shí)a.Length=0(不報(bào)錯(cuò))
// 場(chǎng)景2:調(diào)用params+普通參數(shù)的方法(普通參數(shù)必須按順序傳遞,params參數(shù)在最后)
Test2(10, 20, 30, 40, 50); // a=10,b=20,c數(shù)組存儲(chǔ)30、40、50(c.Length=3)
}? 必記要點(diǎn):
調(diào)用時(shí),無需手動(dòng)創(chuàng)建數(shù)組,直接傳遞任意數(shù)量的同類型參數(shù)即可(編譯器會(huì)自動(dòng)將這些參數(shù)封裝成數(shù)組)。
允許傳遞0個(gè)參數(shù)(此時(shí)params數(shù)組長(zhǎng)度為0,遍歷數(shù)組時(shí)不會(huì)報(bào)錯(cuò),只是不執(zhí)行循環(huán))。
若方法有普通參數(shù)+params參數(shù),需先傳遞普通參數(shù)(按定義順序),再傳遞params對(duì)應(yīng)的不定數(shù)量參數(shù)。
三、params參數(shù)的核心用法(必記,結(jié)合原代碼)
1. 訪問參數(shù)的方式(必考)
public static void Test1(params int[] a)
{
// 1. 獲取參數(shù)個(gè)數(shù)(數(shù)組長(zhǎng)度)
Console.WriteLine(a.Length); // 如傳遞11個(gè)參數(shù),輸出11
// 2. 訪問單個(gè)參數(shù)(通過下標(biāo),下標(biāo)從0開始)
Console.WriteLine(a[0]); // 訪問第一個(gè)參數(shù)(下標(biāo)0)
Console.WriteLine(a[a.Length-1]);// 訪問最后一個(gè)參數(shù)(下標(biāo)=長(zhǎng)度-1)
// 3. 遍歷所有參數(shù)(最常用,取出所有傳遞的參數(shù))
for (int i = 0; i < a.Length; i++)
{
Console.WriteLine(a[i]); // 依次輸出每個(gè)參數(shù)
}
}易錯(cuò)重點(diǎn):數(shù)組下標(biāo)從0開始,最大下標(biāo) = 數(shù)組長(zhǎng)度 - 1(如a.Length=11,最大下標(biāo)是10,訪問a[11]會(huì)報(bào)錯(cuò))。
2. params+普通參數(shù)的調(diào)用邏輯(結(jié)合Test2)
public static void Test2(int a,int b,params int[] c)
{
Console.WriteLine(c[0]);//30
}
// 調(diào)用:Test2(10, 20, 30, 40, 50);
// 邏輯解析:
// 前兩個(gè)參數(shù)(10、20)對(duì)應(yīng)普通參數(shù)a、b,后續(xù)所有參數(shù)(30、40、50)封裝到c數(shù)組中
// c數(shù)組內(nèi)容:[30,40,50],c[0]就是30,所以輸出30四、params參數(shù)必背規(guī)則(直接默寫,考試高頻)
1. params必須修飾數(shù)組類型(如int[]、string[]),不能修飾單個(gè)值類型;
2. 一個(gè)方法只能有一個(gè)params參數(shù);
3. params參數(shù)必須是方法的最后一個(gè)參數(shù);
4. 調(diào)用時(shí),可傳遞0個(gè)、1個(gè)或多個(gè)同類型參數(shù),無需手動(dòng)創(chuàng)建數(shù)組;
5. 訪問params參數(shù)的元素,通過“數(shù)組名[下標(biāo)]”,下標(biāo)從0開始,最大下標(biāo)=數(shù)組長(zhǎng)度-1;
6. params參數(shù)本質(zhì)是數(shù)組,可使用數(shù)組的所有屬性(如Length)和方法。
五、高頻易錯(cuò)點(diǎn)(避坑專用,必記,對(duì)應(yīng)報(bào)錯(cuò)場(chǎng)景)
易錯(cuò)1:params修飾非數(shù)組類型(如public static void Test(params int a))→ 語法報(bào)錯(cuò);
易錯(cuò)2:一個(gè)方法定義多個(gè)params參數(shù)(如public static void Test(params int[] a, params string[] b))→ 報(bào)錯(cuò);
易錯(cuò)3:params參數(shù)不是方法的最后一個(gè)參數(shù)(如public static void Test(params int[] a, int b))→ 報(bào)錯(cuò);
易錯(cuò)4:訪問params數(shù)組時(shí),下標(biāo)超出范圍(如a.Length=2,訪問a[2])→ 數(shù)組越界報(bào)錯(cuò);
易錯(cuò)5:調(diào)用params+普通參數(shù)的方法時(shí),普通參數(shù)傳遞順序錯(cuò)誤(如Test2(30, 10, 20),將params參數(shù)提前)→ 報(bào)錯(cuò);
易錯(cuò)6:誤以為params參數(shù)不能傳遞0個(gè)參數(shù)→ 可以傳遞0個(gè),此時(shí)數(shù)組長(zhǎng)度為0,遍歷不會(huì)報(bào)錯(cuò);
易錯(cuò)7:手動(dòng)創(chuàng)建數(shù)組傳遞給params參數(shù)(如Test1(new int[]{1,2,3}))→ 語法允許,但無需手動(dòng)創(chuàng)建,編譯器會(huì)自動(dòng)封裝。
補(bǔ)充說明:
所有知識(shí)點(diǎn)、易錯(cuò)點(diǎn)均嚴(yán)格對(duì)應(yīng)原代碼,params參數(shù)的核心是“不定數(shù)量參數(shù)傳遞”,重點(diǎn)記憶“3個(gè)語法規(guī)則”(修飾數(shù)組、僅一個(gè)、在最后)和“下標(biāo)訪問規(guī)則”,考試中常考查語法規(guī)范和調(diào)用邏輯,結(jié)合Test1、Test2方法強(qiáng)化記憶,規(guī)避數(shù)組越界、參數(shù)順序錯(cuò)誤等常見報(bào)錯(cuò)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Unity游戲開發(fā)之炸彈人游戲的實(shí)現(xiàn)
大家小時(shí)候肯定玩過這款游戲,炸彈人也算是經(jīng)典中的經(jīng)典啦。本文將利用Unity模擬實(shí)現(xiàn)這一經(jīng)典游戲,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-03-03
C#中winform窗體實(shí)現(xiàn)注冊(cè)/登錄功能實(shí)例(DBHelper類)
在編寫項(xiàng)目時(shí),編寫了一部分關(guān)于登錄頁面的一些代碼,下面這篇文章主要給大家介紹了關(guān)于C#中winform窗體實(shí)現(xiàn)注冊(cè)/登錄功能(DBHelper類)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表詳細(xì)
這篇文章主要介紹了C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表,在這里選擇 C# 的好處是體積小,結(jié)合 loadAssembly 方便免殺,希望對(duì)讀者們有所幫助2021-09-09
C# 空值處理運(yùn)算符??、?. 及其它常用符號(hào)
本文主要介紹了C# 空值處理運(yùn)算符??、?. 及其它常用符號(hào),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-11-11

