第7章常用數(shù)據(jù)結(jié)構(gòu)與算法_第1頁(yè)
第7章常用數(shù)據(jù)結(jié)構(gòu)與算法_第2頁(yè)
第7章常用數(shù)據(jù)結(jié)構(gòu)與算法_第3頁(yè)
第7章常用數(shù)據(jù)結(jié)構(gòu)與算法_第4頁(yè)
第7章常用數(shù)據(jù)結(jié)構(gòu)與算法_第5頁(yè)
已閱讀5頁(yè),還剩106頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第7章常用數(shù)據(jù)結(jié)構(gòu)2010-9-25數(shù)據(jù)結(jié)構(gòu)和算法是程序設(shè)計(jì)的基石。本章重點(diǎn)講述C#中的幾個(gè)主要的數(shù)據(jù)結(jié)構(gòu)類(lèi)型:字符串、數(shù)組和枚舉。2023/2/42C#程序設(shè)計(jì)實(shí)用教程

7.1字符串

字符串是應(yīng)用程序和用戶(hù)交互的主要方式之一。.NET提供了幾個(gè)類(lèi)來(lái)快速實(shí)現(xiàn)字符串操作,包括String、StringBuilder等。2023/2/43C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

System.String是最常用的字符串操作類(lèi)。下面從各個(gè)應(yīng)用的角度對(duì)String類(lèi)進(jìn)行詳細(xì)的介紹。比較字符串定位字符和字串格式化字符串分割字符串插入和填充字符串刪除和剪切字符串復(fù)制字符串更換字符串更改大小寫(xiě)2023/2/44C#程序設(shè)計(jì)實(shí)用教程1.比較字符串

1.比較字符串比較字符串是指按照字典排序規(guī)則,判定兩個(gè)字符的相對(duì)大小。在String類(lèi)中,常用的比較字符串的方法包括CompareCompareToCompareOrdinalEquals

7.1.1靜態(tài)字符串String

(1)Compare方法Compare方法是String類(lèi)的靜態(tài)方法,用于全面比較兩個(gè)字符串對(duì)象。

例:

System.StringstrA="Hello";System.StringstrB="World"; Console.WriteLine(String.Compare(strA,strB)); //-1Console.WriteLine(String.Compare(strA,strA)); //0Console.WriteLine(String.Compare(strB,strA)); //1

2023/2/46C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(2)CompareTo方法

CompareTo方法將當(dāng)前字符串對(duì)象與另一個(gè)對(duì)象做比較,其作用與Compare類(lèi)似,返回值也相同。

CompareTo與Compare相比,區(qū)別在于:

CompareTo不是靜態(tài)方法,沒(méi)有重載形式,只能按照大小寫(xiě)敏感方式比較兩個(gè)整串。

例:System.String

strA="Hello";System.String

strB="World";

Console.WriteLine(strA.CompareTo(strB)); //-12023/2/47C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(3)Equals方法Equals方法用于方便地判定兩個(gè)字符串是否相同,有兩種重載形式:

publicbool

Equals(string)publicstaticbool

Equals(string,string)如果兩個(gè)字符串相等,Equals()返回值為T(mén)rue;否則,返回False。Console.WriteLine(String.Equals(strA,strB)); //falseConsole.WriteLine(strA.Equals(strB)); //false2023/2/48C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(4)比較運(yùn)算符String支持兩個(gè)比較運(yùn)算符“==”、“!=”,分別用于判定兩個(gè)字符是否相等和不等,并區(qū)分大小寫(xiě)。下例中,使用“==”、“!=”對(duì)“Hello”和“World”進(jìn)行比較。

//==和!=Console.WriteLine(strA==strB); //falseConsole.WriteLine(strA!=strB); //true2023/2/49C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

2.定位字符和子串定位子串是指在一個(gè)字符串尋找其中包含的子串或者某個(gè)字符,在String類(lèi)中,常用的定位子串和字符的方法包括:StartWith/EndsWith、

IndexOf/LastIndexOf

IndexOfAny/LastIndexOf。

2023/2/410C#程序設(shè)計(jì)實(shí)用教程2.定位字符和子串

7.1.1靜態(tài)字符串String

(1)StartWith/EndsWith方法StartWith方法可以判定一個(gè)字符串對(duì)象是否以另一個(gè)子字符串開(kāi)頭,如果是返回True;否則返回False。其定義為:

publicbool

StartsWith(stringvalue)其中,參數(shù)value即待判定的子字符串。

//StartWith

Console.WriteLine(strA.StartsWith("He"));//trueConsole.WriteLine(strA.StartsWith("She"));//false另外,EndsWith方法可以判定一個(gè)字符是否以另一個(gè)子字符串結(jié)尾。

2023/2/411C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(2)IndexOf/LastIndexOf方法IndexOf方法用于搜索一個(gè)字符串,某個(gè)特定的字符或子串第一次出現(xiàn)的位置,該方法區(qū)分大小寫(xiě),并從字符串的首字符開(kāi)始以0計(jì)數(shù)。如果字符串中不包含這個(gè)字符或子串,則返回-1。定位字符:

int

IndexOf(charvalue)int

IndexOf(char

value,int

startIndex)int

IndexOf(char

value,int

startIndex,intcount)2023/2/412C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

定位子串:

intIndexOf(stringvalue)intIndexOf(stringvalue,intstartIndex)intIndexOf(stringvalue,intstartIndex,intcount)在上述重載形式中,其參數(shù)含義如下:

Value:待定位的字符或者子串。

startIndex:在總串中開(kāi)始搜索的起始位置。

Count:在總串中從起始位置開(kāi)始搜索的字符數(shù)。

2023/2/413C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例在“Hello”中尋找字符“l(fā)”第一次出現(xiàn)的位置。

//IndexofConsole.WriteLine(strA.IndexOf('l')); //2同IndexOf類(lèi)似,LastIndexOf用于搜索在一個(gè)字符串中,某個(gè)特定的字符或子串最后一次出現(xiàn)的位置,其方法定義和返回值都與IndexOf相同。2023/2/414C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(3)IndexOfAny/LastIndexOfAnyIndexOfAny方法功能同IndexOf類(lèi)似,區(qū)別在于,可以搜索在一個(gè)字符串中,出現(xiàn)在一個(gè)字符數(shù)組中的任意字符第一次出現(xiàn)的位置。2023/2/415C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例在“Hello”中尋找字符“l(fā)”第一次和最后一次出現(xiàn)的位置。

char[]anyOf={'H','e','l'};Console.WriteLine(strA.IndexOfAny(anyOf)); //0Console.WriteLine(strA.LastIndexOfAny(anyOf));//3同IndexOfAny類(lèi)似,LastIndexOfAny用于搜索在一個(gè)字符串中,出現(xiàn)在一個(gè)字符數(shù)組中任意字符最后一次出現(xiàn)的位置。

2023/2/416C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

3.格式化字符串Format方法用于創(chuàng)建格式化的字符串以及連接多個(gè)字符串對(duì)象。Foramt方法也有多個(gè)重載形式,最常用的為:

publicstaticstringFormat(string

format,paramsobject[]args);其中,參數(shù)format用于指定返回字符串的格式,而args為一系列變量參數(shù)。

2023/2/417C#程序設(shè)計(jì)實(shí)用教程3.格式化字符串

7.1.1靜態(tài)字符串String

newStr="";newStr=String.Format("{0},{1}!",strA,strB);Console.WriteLine(newStr); //Hello,World!在format參數(shù)中包含一些用大括號(hào)括起來(lái)的數(shù)字,如{0}、{1},這些數(shù)字分別一一對(duì)應(yīng)于args參數(shù)數(shù)組中的變量。在生成結(jié)果字符串時(shí),將使用這些變量代替{i}。需要說(shuō)明的是,這些變量并不要求必須為String類(lèi)型。

2023/2/418C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

例如,想要輸出一定格式的時(shí)間字符串,便可以使用Format方法,如下面代碼所示。

newStr=String.Format("CurrentTime={0:yyyy-MM-dd}",System.DateTime.Now);Console.WriteLine(newStr); //形如:2008-09-19其中,格式字符串“yyyy-MM-dd”指定返回時(shí)間的格式形如“2008-09-19”。

2023/2/419C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

4.連接字符串(1)Concat方法

Concat方法用于連接兩個(gè)或多個(gè)字符串newStr="";newStr=String.Concat(strA,"",strB);Console.WriteLine(newStr); //“HelloWorld"2023/2/420C#程序設(shè)計(jì)實(shí)用教程4.連接字符串

7.1.1靜態(tài)字符串String

(2)Join方法

Join方法利用一個(gè)字符數(shù)組和一個(gè)分隔符串構(gòu)造新的字符串。常用于把多個(gè)字符串連接在一起,并用一個(gè)特殊的符號(hào)來(lái)分隔開(kāi)。Join方法的常用形式為:

publicstaticstringJoin(string

separator,string[]values);其中,參數(shù)separator為指定的分隔符,而values用于指定所要連接的多個(gè)字符串?dāng)?shù)組。2023/2/421C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例用“^^”分隔符把“Hello”和“World”連起來(lái)。

//JoinnewStr="";String[]strArr={strA,strB};newStr=String.Join("^^",strArr);Console.WriteLine(newStr); //"Hello^^World"2023/2/422C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(3)連接運(yùn)算符“+”String支持連接運(yùn)算符“+”,可以方便地連接多個(gè)字符串。例如,下例把“Hello”和“World”連接起來(lái)。

//+newStr="";newStr=strA+strB;Console.WriteLine(newStr); //"HelloWorld"2023/2/423C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

5.分隔字符串使用Split方法可以把一個(gè)整串,按照某個(gè)分隔符,分裂成一系列小的字符串。例如,把整串,按照某個(gè)分隔符,分裂成一系列小的字符串。例如,把整串“Hello^^World”按照字符“^”進(jìn)行分裂,可以得到3個(gè)小的字符串,即“Hello”、“”(空串)和“World”。Split方法最常用的形式為:

publicstring[]Split(paramschar[]separator);

其中,參數(shù)separator數(shù)組包含分隔符。2023/2/424C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

//SplitnewStr="Hello^^World";char[]separator={'^'};String[]splitStrings=newString[100];splitStrings=newStr.Split(separator);inti=0;while(i<splitStrings.Length){ Console.WriteLine("item{0}:{1}",i,splitStrings[i]); i++;}輸出結(jié)果如下:

Item0:HelloItem1:Item2:World2023/2/425C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

6.插入和填充字符串String類(lèi)包含了在一個(gè)字符串中插入新元素的方法,可以用Insert方法在任意插入任意字符。

Insert方法用于在一個(gè)字符串的指定位置插入另一個(gè)字符串,從而構(gòu)造一個(gè)新的串。Insert方法最常用的為:

publicstringInsert(int

startIndex,stringvalue);其中,參數(shù)startIndex用于指定所要插入的位置,從0開(kāi)始索引;value指定所要插入的字符串。2023/2/426C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例中,在“Hello”的字符“H”后面插入“World”,構(gòu)造一個(gè)串“HWorldello”。

newStr="";newStr=strA.Insert(1,strB);Console.WriteLine(newStr); //"HWorldello"2023/2/427C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

7.刪除和剪切字符串String類(lèi)包含了刪除一個(gè)字符串的方法??梢杂肦emove方法在任意位置刪除任意長(zhǎng)度的字符。也可以使用Trim/TrimeEnd/TrimStart方法剪切掉字符串中的一些特定字符。

2023/2/428C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(1)Remove方法

Remove方法從一個(gè)字符串的指定位置開(kāi)始,刪除指定數(shù)量的字符。最常用的形式為:

publicstringRemove(int

startIndex,intcount);其中,參數(shù)startIndex用于指定開(kāi)始刪除的位置,從0開(kāi)始索引;count指定刪除的字符數(shù)量。下例中,把“Hello”中的“ell”刪掉。

//RemovenewStr="";newStr=strA.Remove(1,3);Console.WriteLine(newStr); //"Ho"2023/2/429C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(2)Trim/TrimStart/TrimEnd方法

若想把一個(gè)字符串首尾處的一些特殊字符剪切掉,如去掉一個(gè)字符串首尾的空格等,可以使用String的Trim()方法。其形式如下:

publicstringTrim() publicstringTrim(paramschar[]trimChars)其中,參數(shù)trimChars數(shù)組包含了指定要去掉的字符,如果缺省,則刪除空格符號(hào)。下例中,實(shí)現(xiàn)了對(duì)“@Hello#$”的凈化,去掉首尾的特殊符號(hào)。

2023/2/430C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

//TrimnewStr="";char[]trimChars={'@','#','$',''};StringstrC="@Hello#$";newStr=strC.Trim(trimChars);Console.WriteLine(newStr); //"Hello"另外,同Trim類(lèi)似,TrimStart和TrimEnd分別剪切掉一個(gè)字符串開(kāi)頭和結(jié)尾處的特殊字符。

2023/2/431C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

8.復(fù)制字符串String類(lèi)包括了復(fù)制字符串方法Copy和CopyTo,可以完成對(duì)一個(gè)字符串及其一部分的復(fù)制操作。

2023/2/432C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(1)Copy方法

若想把一個(gè)字符串復(fù)制到另一個(gè)字符數(shù)組中,可以使用String的靜態(tài)方法Copy來(lái)實(shí)現(xiàn),其形式為:

publicstringCopy(string

str);其中,參數(shù)str為需要復(fù)制的源字符串,方法返回目標(biāo)字符串。下例中,把strA字符串“Hello”復(fù)制到newStr中。

//CopynewStr="";newStr=String.Copy(strA);Console.WriteLine(newStr); //"Hello"2023/2/433C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

(2)CopyTo方法

CopyTo方法可以實(shí)現(xiàn)Copy同樣的功能,但功能更為豐富,可以復(fù)制字符串的一部分到一個(gè)字符數(shù)組中。其形式為:

publicvoidCopyTo(int

sourceIndex,char[]destination,int

destinationIndex,intcount);其中,參數(shù)sourceIndex為需要復(fù)制的字符起始位置,destination為目標(biāo)字符數(shù)組,destinationIndex指定目標(biāo)數(shù)組中的開(kāi)始存放位置,而count指定要復(fù)制的字符個(gè)數(shù)。2023/2/434C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例中,把strA字符串“Hello”中的“ell”復(fù)制到newCharArr中,并在newCharArr中從第2個(gè)元素開(kāi)始存放。

//CopyTochar[]newCharArr=newchar[100];strA.CopyTo(2,newCharArr,0,3);Console.WriteLine(newCharArr); //”llo"2023/2/435C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

9.替換字符串想要替換一個(gè)字符串中的某些特定字符或者某個(gè)子串,可以使用Replace方法來(lái)實(shí)現(xiàn),其形式為:

publicstringReplace(charoldChar,charnewChar);publicstringReplace(stringoldValue,stringnewValue);其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。下例把“Hello”通過(guò)替換變?yōu)椤癏ero”。

//ReplacenewStr=strA.Replace("ll","r"); Console.WriteLine(newStr); //Hero2023/2/436C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

10.更改大小寫(xiě)String提供了方便轉(zhuǎn)換字符串中所有字符大小寫(xiě)的方法ToUpper和ToLower。下例首先把“Hello”轉(zhuǎn)換為“HELLO”,然后再變?yōu)樾?xiě)形式“hello”。

//ToUpper|ToLower

newStr=strA.ToUpper(); Console.WriteLine(newStr); //HELLOnewStr=strA.ToLower();Console.WriteLine(newStr); //hello2023/2/437C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

11.String小結(jié)本節(jié)介紹了最常用的String類(lèi),并從比較、定位子串、格式化、連接、分裂、插入、刪除、復(fù)制、大小寫(xiě)轉(zhuǎn)換10個(gè)方面介紹了其方法和應(yīng)用。

之所以稱(chēng)String對(duì)象為靜態(tài)串,是因?yàn)橐坏┒x一個(gè)String對(duì)象,就是不可改變的。在使用其方法(如插入、刪除操作)時(shí),都要在內(nèi)存中創(chuàng)建一個(gè)新的String對(duì)象,而不是在原對(duì)象的基礎(chǔ)上進(jìn)行修改,這就需要開(kāi)辟新的內(nèi)存空間。如果需要經(jīng)常進(jìn)行串修改操作,使用String類(lèi)無(wú)疑是非常耗費(fèi)資源的,這時(shí)需要使用StringBuilder類(lèi)。2023/2/438C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

與String類(lèi)相比,System.Text.StringBuilder類(lèi)可以實(shí)現(xiàn)動(dòng)態(tài)字符串。此外,動(dòng)態(tài)的含義是指在修改字符串時(shí),系統(tǒng)不需要?jiǎng)?chuàng)建新的對(duì)象,不會(huì)重復(fù)開(kāi)辟新的內(nèi)存空間,而是直接在原StringBuilder對(duì)象的基礎(chǔ)上進(jìn)行修改。2023/2/439C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

1.聲明StringBuilder串StringBuilder類(lèi)位于命名空間System.Text中,使用時(shí),可以在文件頭通過(guò)using語(yǔ)句引入該命名空間:

usingSystem.Text;聲明StringBuilder對(duì)象需要使用new關(guān)鍵字,并可以對(duì)其進(jìn)行初始化。如以下語(yǔ)句聲明了一個(gè)StringBuilder對(duì)象myStringBuilder,并初始化為“Hello”:

StringBuilder

myStringBuilder=newStringBuilder("Hello");2023/2/440C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

2.設(shè)置StringBuilder容量StringBuilder對(duì)象為動(dòng)態(tài)字符串,可以對(duì)其設(shè)置好的字符數(shù)量進(jìn)行擴(kuò)展。另外,還可以設(shè)置一個(gè)最大長(zhǎng)度,這個(gè)最大長(zhǎng)度稱(chēng)為該StringBuilder對(duì)象的容量(Capacity)。2023/2/441C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

有兩種方式來(lái)設(shè)置一個(gè)StringBuilder對(duì)象的容量。(1)使用構(gòu)造函數(shù)StringBuilder構(gòu)造函數(shù)可以接受容量參數(shù),例如,下面聲明一個(gè)StringBuilder對(duì)象sb2,并設(shè)置其容量為100。//使用構(gòu)造函數(shù)StringBuildersb2=newStringBuilder("Hello",100);2023/2/442C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

(2)使用Capacity讀/寫(xiě)屬性Capacity屬性指定StringBuilder對(duì)象的容量。例如下面語(yǔ)句首先一個(gè)StringBuilder對(duì)象sb3,然后利用Capacity屬性設(shè)置其容量為100。//使用Capacity屬性StringBuildersb3=newStringBuilder("Hello");sb3.Capacity=100;2023/2/443C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

3.追加操作追加一個(gè)StringBuilder是指將新的字符串添加到當(dāng)前StringBuilder字符串的結(jié)尾處,可以使用Append和AppendFormat來(lái)實(shí)現(xiàn)這個(gè)功能。(1)Append方法下例中,把一個(gè)StringBuilder字符串“Hello”追加為“HelloWorld!”。//AppendStringBuildersb4=newStringBuilder("Hello");sb4.Append("World!");Console.WriteLine(sb4); //"HelloWorld!"2023/2/444C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

(2)AppendFormat方法AppendFormat方法可以實(shí)現(xiàn)對(duì)追加部分字符串的格式化,可以定義變量的格式,并將格式化后的字符串追加在StringBuilder后面。2023/2/445C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

4.插入操作StringBuilder的插入操作是指將新的字符串插入到當(dāng)前的StringBuilder字符串的指定位置,如“Hello”變?yōu)椤癏eeeello”??梢允褂肧tringBuilder類(lèi)的Insert方法來(lái)實(shí)現(xiàn)這個(gè)功能,常用形式為:publicStringBuilderInsert(intindex,objectvalue);其中,參數(shù)index指定所要插入的位置,并從0開(kāi)始索引,如index=1,則會(huì)在原字符串的第2個(gè)字符之前進(jìn)行插入操作;同Append一樣,參數(shù)value并不僅是只可取字符串類(lèi)型。2023/2/446C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

下例中,把一個(gè)StringBuilder字符串“Hello”通過(guò)插入操作修改為“Heeeello”。//InsertStringBuildersb6=newStringBuilder("Hello");sb6.Insert(2,"eee");Console.WriteLine(sb6); //"Heeeello"2023/2/447C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

5.刪除操作StringBuilder的刪除操作可以從當(dāng)前StringBuilder字符串的指定位置,刪除一定數(shù)量的字符,例如把“Heeeello”變?yōu)椤癏ello”??梢允褂肧tringBuilder類(lèi)的Remove方法來(lái)實(shí)現(xiàn)這個(gè)功能,常用形式為:publicStringBuilderRemove(intstartIndex,intlength);其中,參數(shù)startIndex指定所要?jiǎng)h除的起始位置,其含義同Insert中的index相同;length參數(shù)指定所要?jiǎng)h除的字符數(shù)量。2023/2/448C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

下例中,把一個(gè)StringBuilder字符串“Heeeello”通過(guò)刪除操作修改為“Hello”。//RemoveStringBuildersb7=newStringBuilder("Heeello");sb7.Remove(2,2); //在”He”后面刪除個(gè)字符Console.WriteLine(sb7); //"Hello!"2023/2/449C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

6.替換操作StringBuilder使用Replace方法來(lái)實(shí)現(xiàn)替換操作,例如把“Hello”變?yōu)椤癏ero”,就需要使用替換操作,將“l(fā)l”替換為“r”。這同String類(lèi)的Replace方法非常類(lèi)似,其常用形式包括:publicStringBuilderReplace(charoldChar,charnewChar);publicStringBuilderReplace(stringoldValue,stringnewValue);其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。2023/2/450C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

下例把“Hello”通過(guò)替換為“Hero”。//ReplaceStringBuildersb8=newStringBuilder("Hello");sb8=sb8.Replace("ll","r"); Console.WriteLine(sb8); //Hero2023/2/451C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

7.與String比較可以看出StringBuilder與String在許多操作上是非常相似的。而在操作性能和內(nèi)存效率方面,StringBuilder要比String好得多。而另一方面,String類(lèi)提供了更多的方法,可以使開(kāi)發(fā)能夠更快地實(shí)現(xiàn)應(yīng)用。在兩者的選擇上,如果應(yīng)用對(duì)于系統(tǒng)性能、內(nèi)存要求比較嚴(yán)格,以及經(jīng)常處理大規(guī)模的字符串,推薦使用StringBuilder對(duì)象;否則,可以選擇使用String。2023/2/452C#程序設(shè)計(jì)實(shí)用教程

7.2數(shù)組

數(shù)組的作用非常強(qiáng)大,數(shù)據(jù)也是基本數(shù)據(jù)結(jié)構(gòu)之一,是編程實(shí)現(xiàn)過(guò)程中必不可少的要素之一。2023/2/453C#程序設(shè)計(jì)實(shí)用教程

7.2.1數(shù)組的概念

數(shù)組(Array)是一種數(shù)據(jù)結(jié)構(gòu),一個(gè)數(shù)組由若干個(gè)類(lèi)型相同的數(shù)組元素的變量,這些變量可以通過(guò)一個(gè)數(shù)組名和數(shù)組下標(biāo)(或者稱(chēng)為索引)來(lái)訪問(wèn)。C#中的數(shù)組下標(biāo)是從零開(kāi)始,數(shù)組中的所在元素都具有相同的類(lèi)型。在數(shù)組中,每一個(gè)成員叫做數(shù)組元素,數(shù)組元素的類(lèi)型稱(chēng)為數(shù)組類(lèi)型,數(shù)組類(lèi)型可以是C#中定義的任意類(lèi)型,其中也包括數(shù)組類(lèi)型本身。如果一個(gè)數(shù)組的類(lèi)型不是數(shù)組類(lèi)型,稱(chēng)之為一維數(shù)組。如果數(shù)組元素的類(lèi)型是數(shù)組類(lèi)型,就稱(chēng)之為多維數(shù)組,也就是說(shuō),數(shù)組定義可以嵌套。2023/2/454C#程序設(shè)計(jì)實(shí)用教程

7.2.1數(shù)組的概念

無(wú)論是一維數(shù)組還是多維數(shù)組,每個(gè)維的下標(biāo)都是從0開(kāi)始,結(jié)束于這個(gè)維的數(shù)組長(zhǎng)度減1。數(shù)組被用于各種目的,因?yàn)樗峁┝艘环N高效、方便的手段將相同類(lèi)型的變量合成一組。例如,可以用數(shù)組保存一個(gè)月中每天的溫度記錄,貨物平均價(jià)格的記錄。數(shù)組的主要優(yōu)點(diǎn)是,通過(guò)這樣的一種方式組織數(shù)據(jù)使得數(shù)據(jù)容易被操縱。。2023/2/455C#程序設(shè)計(jì)實(shí)用教程

7.2.1數(shù)組的概念

在實(shí)際使用數(shù)據(jù)的過(guò)程中,一般是先確定數(shù)據(jù)類(lèi)型,然后根據(jù)實(shí)際情況確定數(shù)組的長(zhǎng)度。C#中的數(shù)組是由System.Array類(lèi)派生而來(lái)的引用對(duì)象,因此可以使用Array類(lèi)的方法來(lái)進(jìn)行各種操作。2023/2/456C#程序設(shè)計(jì)實(shí)用教程

7.2.2System.Array類(lèi)

System.Array類(lèi)是C#中各種數(shù)組的基類(lèi),其常用屬性和方法的簡(jiǎn)單說(shuō)明如表7-1所示。2023/2/457C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

1.一維數(shù)組的定義數(shù)據(jù)在使用前使用先進(jìn)行定義。定義一維數(shù)組的格式如下:

數(shù)據(jù)類(lèi)型[]數(shù)組名:例如:char[]charArr;//定義了一個(gè)字符型的一維數(shù)組int[]intArr;//定義了一個(gè)整型一維數(shù)組string[]strArr;//定義了一個(gè)字符串類(lèi)型一維數(shù)組初始化數(shù)組有兩種方法,即動(dòng)態(tài)初始化和靜態(tài)初始化。2023/2/458C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

2.動(dòng)態(tài)初始化動(dòng)態(tài)初始化需要借助new運(yùn)算符,為數(shù)組元素分配內(nèi)存空間,并為數(shù)據(jù)元素賦初始值。動(dòng)態(tài)初始化數(shù)組的格式如下:

數(shù)組名=new數(shù)據(jù)類(lèi)型[數(shù)組長(zhǎng)度];在C#中,可以將數(shù)組定義與動(dòng)態(tài)初始化合在一起,格式如下:

數(shù)據(jù)類(lèi)型[]數(shù)組名=new數(shù)據(jù)類(lèi)型[數(shù)組長(zhǎng)度];

int[]intArr=newint[5];

int[]intArr=newint[5]{3,6,9,2,10};

int[]intArr=newint[]{3,6,9,2,10};2023/2/459C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

3.靜態(tài)初始化靜態(tài)初始化數(shù)組時(shí),必須與數(shù)組定義結(jié)合在一起,否則程序就會(huì)報(bào)錯(cuò)。靜態(tài)初始化數(shù)組的格式如下:

數(shù)據(jù)類(lèi)型[]數(shù)據(jù)名={元素1[,元素2…]};例如:int[]intArr={3,6,9,2,10};string[]str={“English”,”Maths”,”Computer”,”Chinese”};2023/2/460C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

4.關(guān)于一維數(shù)據(jù)初始化的幾點(diǎn)說(shuō)明(1)動(dòng)態(tài)初始化數(shù)組時(shí),可以把定義與初始化分開(kāi)在不同的語(yǔ)句中者,例如:int[]intArr;//定義數(shù)組intArr=newint[5];//動(dòng)態(tài)初始化,初始化元素的值均為0或者intArr=newint[5]{3,6,9,2,10};2023/2/461C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

4.關(guān)于一維數(shù)據(jù)初始化的幾點(diǎn)說(shuō)明(2)靜態(tài)初始化數(shù)組必須與數(shù)組結(jié)合在一條語(yǔ)句中,否則程序就會(huì)出錯(cuò)。

int[]intArr={3,6,9,2,10};(3)在數(shù)組初始化語(yǔ)句中,如果大括號(hào)中已明確列出了數(shù)組中的元素,即確定了元素個(gè)數(shù),則表示數(shù)組元素個(gè)數(shù)的數(shù)值(即方括號(hào)中的數(shù)值)必須是常量,并且該數(shù)值必須與數(shù)組元素個(gè)數(shù)一致。int[]intArr=newint[5]{3,6,9,2,10};2023/2/462C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

5.訪問(wèn)一維數(shù)組中的元素在C#中是通過(guò)數(shù)組名和下標(biāo)值來(lái)訪問(wèn)數(shù)組元素的。在訪問(wèn)數(shù)組元素時(shí),其下標(biāo)可以是一個(gè)整型常量或整型表達(dá)式。例如,下面的數(shù)組元素的下標(biāo)都是合法的:

intArr[3],strArr[0],intArr[j],strArr[2*i-1]2023/2/463C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

【例7-1】給定8個(gè)數(shù):8、7、6、5、4、3、2、1,將這些數(shù)存在數(shù)組中,并將其按從小到大的順序輸出。(1)定義一個(gè)數(shù)組,如數(shù)組名為QueArrey,并將其用給定的數(shù)進(jìn)行初始化。(2)遍歷數(shù)組,將8個(gè)數(shù)中最小的數(shù)找出來(lái),與第1個(gè)位置上的數(shù)對(duì)調(diào)。其方法是:先找出存放最小的數(shù)組元素的下標(biāo),將其存放在變量temp中,然后將QueArray[0]和QueArray[temp]中的數(shù)對(duì)調(diào),使QueArray[0]中存放的是8?jìng)€(gè)數(shù)中最小的數(shù)。(3)再?gòu)牡冢矀€(gè)數(shù)到第8?jìng)€(gè)數(shù)中找出最小的數(shù),并按步驟(2)中的方法,將最小的數(shù)與第2個(gè)位置上的數(shù)對(duì)調(diào),使QueArray[1]中存放的是第2小的數(shù)。(4)依次類(lèi)推,完成整個(gè)排序過(guò)程,并輸出結(jié)果。2023/2/464C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

程序代碼如下:usingSystem;

namespaceArraySort{classArraySort{staticvoidMain(){

inti,j,temp,m;

int[]QueArray=newint[]{8,7,6,5,4,3,2,1};for(j=0;j<QueArray.Length;j++){temp=j;2023/2/465C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

for(i=j+1;i<QueArray.Length;i++)//從j的下一個(gè)元素起開(kāi)始比較{if(QueArray[i]<QueArray[temp])

//比較數(shù)組元素temp=i;

//使temp為較小的數(shù)的下標(biāo)}if(temp!=j){/*交換QueArray[temp]和QueArray[j]的值,

從而可以從所比較的數(shù)組元素中獲得較小

的婁賦給QueArray[j]*/m=QueArray[j];

QueArray[j]=QueArray[temp];QueArray[temp]=m;}}2023/2/466C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

Console.WriteLine("輸出排序后的結(jié)果:");for(j=0;j<QueArray.Length;j++)Console.Write("{0}",QueArray[j]);}}}執(zhí)行該程序后,程序輸出結(jié)果如下:123456782023/2/467C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

注意:(1)除了可以顯式地指出數(shù)組長(zhǎng)度之外,更好的做法是使用System.Array類(lèi)的Length屬性,數(shù)組的Length用于獲取數(shù)組所包含的全部元素的個(gè)數(shù)。(2)上面所用的排序方法是一種常規(guī)的方法,在C#中,對(duì)數(shù)組進(jìn)行排序還有更高效的方法;可以使用Array類(lèi)的Sort方法完成這個(gè)功能。Sort方法有多種的重載方法,常用的形式如下: publicstaticvoidSort(Arrayarray);2023/2/468C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

【例7-2】給定8個(gè)數(shù):8、7、6、5、4、3、2、1,將這些數(shù)存在數(shù)組中,利用Array類(lèi)的Sort方法將其按從小到大的順序輸出。usingSystem;

namespaceSortArray{classSortArray{staticvoidMain(){int[]QueArray=newint[]{8,7,6,5,4,3,2,1};//定義數(shù)組

//輸出原始數(shù)組Console.WriteLine("原始數(shù)組:");for(inti=0;i<QueArray.Length;i++)Console.Write("{0}->",QueArray[i]);Console.WriteLine();//進(jìn)行換行

Array.Sort(QueArray);//對(duì)數(shù)組排序

//輸出排序后的數(shù)組Console.WriteLine("排序以后的數(shù)組:");for(inti=0;i<QueArray.Length;i++)Console.Write("{0}->",QueArray[i]);}}}2023/2/469C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

for(inti=0;i<QueArray.Length;i++)Console.Write("{0}->",QueArray[i]);Console.WriteLine();//進(jìn)行換行

Array.Sort(QueArray);//對(duì)數(shù)組排序

//輸出排序后的數(shù)組Console.WriteLine("排序以后的數(shù)組:");for(inti=0;i<QueArray.Length;i++)Console.Write("{0}->",QueArray[i]);}}}2023/2/470C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

6.查找元素在數(shù)組中查找元素,一是從整個(gè)數(shù)組中尋找到與給定值相同的元素來(lái),可以使用Array類(lèi)的BinarySearch方法完成這個(gè)功能。二是判定數(shù)組中是否含有一個(gè)特定的元素,可以用Contains方法來(lái)實(shí)現(xiàn)。(1)BinarySearch方法BinarySearch使用二進(jìn)制搜索算法在一維的排序Array中搜索算法,注意必須是已經(jīng)排序的數(shù)組。如果找到給定的值,則返回其下標(biāo);否則,返回一個(gè)負(fù)整數(shù)。常用形式如下: publicstaticint

BinarySearch(Array

array,objectvalue);其中,參數(shù)array為待搜索的數(shù)組,value為待尋找的元素值。2023/2/471C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

【例7-3】給定8個(gè)數(shù):8、7、6、5、4、3、2、1,將這些數(shù)存在數(shù)組中,利用Array類(lèi)的BinarySearch方法返回其中的元素5的下標(biāo)。usingSystem;

namespaceBinarySearch{classBinarySearch{staticvoidMain(){//定義數(shù)組int[]myArr={8,7,6,5,4,3,2,1};

//對(duì)數(shù)組排序Array.Sort(myArr);

2023/2/472C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

//搜索inttarget=5;intresult=Array.BinarySearch(myArr,target);//4Console.WriteLine("{0}的下標(biāo)為{1}",target,result);//4Console.ReadLine();}}}2023/2/473C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

(2)Contains方法Contains方法可以確定某個(gè)特定值的否包含在數(shù)組中,返回一個(gè)bool值。Array類(lèi)的這個(gè)方法實(shí)際上是對(duì)IList接口中方法的實(shí)現(xiàn),常用形式如下:bool

IList.Contains(objectvalue);其中,參數(shù)value代表所要驗(yàn)證的元素值。2023/2/474C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

7.把數(shù)組作為參數(shù)將數(shù)組作為參數(shù)傳遞可以將初始化的數(shù)組傳遞給方法。例如:int[]myArray=newint[]{1,3,5,7,9};PrintArray(myArray);也可以直接將一個(gè)初始化過(guò)的數(shù)組作為參數(shù)進(jìn)行傳遞。例如下面的代碼等價(jià)于上面數(shù)組傳遞。PrintArray(newint[]{1,3,5,7,9});2023/2/475C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

【例7-5】演示把一個(gè)初始化后字符串?dāng)?shù)組作為參數(shù)傳遞給PrintArray方法。usingSystem;

namespaceParameter{classParameter{staticvoidPrintArray(string[]strArr){for(inti=0;i<strArr.Length;i++)Console.Write("{0}",strArr[i]);Console.WriteLine();}2023/2/476C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

staticvoidMain(){string[]WeekDays=newstring[]{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};PrintArray(WeekDays);//把數(shù)組作為參數(shù)}}}在上面的例子中,主函數(shù)Main把定義好的數(shù)組WeekDays作為參數(shù)傳遞給方法PrintArray,PrintArray方法把接收到的數(shù)組元素一個(gè)個(gè)地打印出來(lái)。2023/2/477C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

在C#中,多維數(shù)組可看作是數(shù)組的數(shù)組,即高維數(shù)組。多維數(shù)組中的每一個(gè)元素本身也是一個(gè)低維數(shù)組,因此多維數(shù)組的定義、初始化和元素訪問(wèn)與一維數(shù)組都非常相似。在多維數(shù)組中,二維數(shù)組是最簡(jiǎn)單也是最常用的數(shù)組,本節(jié)主要介紹二維數(shù)組。2023/2/478C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

1.二維數(shù)組的定義二維數(shù)組的一般語(yǔ)法格式如下:

數(shù)據(jù)類(lèi)型[,]數(shù)組名例如:char[,]charArr;//定義一個(gè)字符型二維數(shù)組int[,]intArr;//定義一個(gè)整型二維數(shù)組2023/2/479C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

定義多維數(shù)組與二維數(shù)組的方法相同,只是要根據(jù)定義數(shù)組的維數(shù)確定方括號(hào)中的逗號(hào)的個(gè)數(shù),一般定義一個(gè)n(n≥2)維數(shù)組,需要的逗號(hào)個(gè)數(shù)是n-1。例如,下面語(yǔ)句定義的是一個(gè)三維數(shù)組: String[,,]stringArr;//定義一個(gè)字符串型三維數(shù)組2023/2/480C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

2.二維數(shù)組的初始化二維數(shù)組包括兩種初始化方法,即:動(dòng)態(tài)初始化和靜態(tài)初始化。動(dòng)態(tài)初始化二維數(shù)組的格式如下:

數(shù)組名=new數(shù)據(jù)類(lèi)型[數(shù)組長(zhǎng)度1,數(shù)組長(zhǎng)度2];其中,數(shù)組長(zhǎng)度1和數(shù)組長(zhǎng)度2可以是整型的常量或變量,它們分別表示數(shù)組第一維和第二維的長(zhǎng)度。2023/2/481C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

也可以將二維數(shù)組的定義與動(dòng)態(tài)初始化合并在一條語(yǔ)句中,格式如下:

數(shù)據(jù)類(lèi)型[,]數(shù)組名=new數(shù)據(jù)類(lèi)型[數(shù)組長(zhǎng)度1,數(shù)組長(zhǎng)度2];例如: int[,]intArr=newint[3,2];上例中new運(yùn)算符用于創(chuàng)建數(shù)組,并默認(rèn)對(duì)數(shù)組元素進(jìn)行初始化。在上例中,所有數(shù)組元素的值都被初始化為0。2023/2/482C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

int[,]intArr=newint[3,2];上面的語(yǔ)句定義一個(gè)二維數(shù)組,其中第1維的長(zhǎng)度為3,第2維的長(zhǎng)度為2。在二維數(shù)組中,第1維常常稱(chēng)為行,第2維也稱(chēng)為列。這樣,一個(gè)二維數(shù)組就同一個(gè)二維表格相對(duì)應(yīng)起來(lái)了??梢赃@樣理解二維數(shù)組:如果只給出二維數(shù)組的第1維下標(biāo),以一維數(shù)組來(lái)看二維數(shù)組,則這樣的數(shù)組中所代表的是另一個(gè)一維數(shù)組。2023/2/483C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

在動(dòng)態(tài)初始化二維數(shù)組時(shí),也可以直接為其賦予初始化值,如下所示: int[,]intArr=newint[,]{{1,2},{3,4},{5,6}};它表示的數(shù)組元素的值如表7-2所示。2023/2/484C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

二維數(shù)組可以進(jìn)行靜態(tài)初始化。例如,下面的語(yǔ)句定義一個(gè)2行3列的double類(lèi)型二維數(shù)組,并對(duì)其進(jìn)行靜態(tài)初始化。

double[,]doubleArr={{1.2,2.3,3.4},{4.5,5.6,6.7}};靜態(tài)初始化二維數(shù)組時(shí),也必須與數(shù)組定義結(jié)合在一條語(yǔ)句中,否則程序就會(huì)報(bào)錯(cuò)。2023/2/485C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

3.訪問(wèn)二維數(shù)組的元素二維數(shù)組也是通過(guò)數(shù)組名和下標(biāo)值來(lái)訪問(wèn)數(shù)組元素的,二維數(shù)組的下標(biāo)值也是從0開(kāi)始的。與一維數(shù)組不同的是,二維數(shù)組需要兩個(gè)下標(biāo)才能唯一標(biāo)識(shí)一個(gè)數(shù)組元素,其中第1個(gè)下標(biāo)該元素所在的行,第2個(gè)下標(biāo)表示該元素所在的列。如intArr[2,0]代表數(shù)組名為intArr的二維數(shù)組中位于第3行、第1列的元素。根據(jù)二維數(shù)組的特點(diǎn),訪問(wèn)二維數(shù)組中的元素通常需要一個(gè)二重循環(huán)。2023/2/486C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

【例7-6】通過(guò)二重循環(huán),將1到16的數(shù)賦給二維數(shù)組,然后顯示數(shù)組的內(nèi)容。程序代碼如下:usingSystem;

namespaceTwoArr{classTwoArr{staticvoidMain(){

inti,j;2023/2/487C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

int[,]intTwoArray=newint[4,4];for(i=0;i<4;i++){for(j=0;j<4;++j){intTwoArray[i,j]=(i*4)+j+1;Console.Write(intTwoArray[i,j]+"");}Console.WriteLine();}}}}2023/2/488C#程序設(shè)計(jì)實(shí)用教程

7.2.4二維數(shù)組

該程序執(zhí)行后,輸出結(jié)果如圖7-1所示:2023/2/489C#程序設(shè)計(jì)實(shí)用教程

7.3枚舉

枚舉類(lèi)型是用戶(hù)自定義的數(shù)據(jù)類(lèi)型,是一種允許用符號(hào)代表數(shù)據(jù)的值類(lèi)型。枚舉是指在程序中某個(gè)變量具有一組確定的值,每一個(gè)值都可以用一個(gè)符號(hào)來(lái)表示??梢酝ㄟ^(guò)列舉符號(hào)來(lái)把值列舉出來(lái)。這樣,通過(guò)使用枚舉類(lèi)型,就可以將一年的四季分別用符號(hào)Spring、Summer、Autumn和Winter來(lái)表示,將一個(gè)星期的7天分別用符號(hào)Monday、Tuesday、Wednesday、Thursday、Friday、Saturday和Sunday來(lái)表示,有助于用戶(hù)更好地閱讀和理解程序。2023/2/490C#程序設(shè)計(jì)實(shí)用教程

7.3.1枚舉類(lèi)型的定義

定義枚舉類(lèi)型時(shí)必須使用enum關(guān)鍵字,其一般語(yǔ)法形式如下:

enum

枚舉名 {枚舉成員表}[;]說(shuō)明:(1)說(shuō)明枚舉類(lèi)型時(shí),必須帶上enum關(guān)鍵字。(2)枚舉名必須是C#中合法的標(biāo)識(shí)符。(3)枚舉類(lèi)型中定義的所有枚舉值都默認(rèn)為整型。(4)由一對(duì)花括號(hào)“{”和“}”括起來(lái)的部分是枚舉成員表。2023/2/491C#程序設(shè)計(jì)實(shí)用教程

7.3.1枚舉類(lèi)型的定義

下面是一個(gè)定義枚舉類(lèi)型的例子:

enum

WeekDay {Sun,Mon,Tue,Wed,Thu,Fri,Sat};上面的語(yǔ)句中定義了一個(gè)名稱(chēng)為WeekDay的枚舉類(lèi)型,它包含Sun、Mon、Tue、Wed、Thu、Fri、Sat這7個(gè)枚舉成員。有了上述定義,WeekDay本身就成了一個(gè)類(lèi)型說(shuō)明符,此后就可以像常量那樣使用這些符號(hào)。注意,兩個(gè)枚舉成員不能完全相同。2023/2/492C#程序設(shè)計(jì)實(shí)用教程

7.3.2枚舉成員的賦值

在定義的枚舉類(lèi)型中,每一個(gè)枚舉成員都有一個(gè)相對(duì)應(yīng)的常量值,如前面定義的名為WeekDay的枚舉類(lèi)型中,其枚舉成員Sun、Mon、Tue、Wed、Thu、Fri和Sat在執(zhí)行程序時(shí),分別被賦予整數(shù)值0、1、2、3、4、5和6。對(duì)于枚舉成員對(duì)應(yīng)的常量值,默認(rèn)情況下,C#規(guī)定第1個(gè)枚舉成員的值取0,它后面的每一個(gè)枚舉成員的值自動(dòng)加上1遞增。在編寫(xiě)程序時(shí),也可根據(jù)實(shí)際需要為枚舉成員賦值。2023/2/493C#程序設(shè)計(jì)實(shí)用教程

7.3.2枚舉成員的賦值

1.為第1個(gè)枚舉成員賦值在定義枚舉類(lèi)型時(shí),為第1個(gè)枚舉成員賦值,如例7-9所示。【例7-9】輸出枚舉成員對(duì)應(yīng)的整數(shù)值。程序代碼如下:usingSystem;

classEnumDemo{enumcolor{yellow=-1,brown,blue,red,black}2023/2/494C#程序設(shè)計(jì)實(shí)用教程

7.3.2枚舉成員的賦值

staticvoidMain(){Console.WriteLine("yellow={0}",color.yellow);Console.WriteLine("yellow={0}",(int)color.yellow);Console.WriteLine("brown={0}",(int)color.brown);Console.WriteLine("blue={0}",(int)color.blue);Console.WriteLine("red={0}",(int)color.red);Console.WriteLine("black={0}",(int)color.black);}}2023/2/495C#程序設(shè)計(jì)實(shí)用教程

7.3.2枚舉成員的賦值

執(zhí)行該程序后,輸出結(jié)果如下所示: yellow=yellow yellow=-1 brown=0 blue=1 red=2 black=3從上面的輸出結(jié)果可知,為第1個(gè)枚舉成員指定整數(shù)值后,其后的枚舉成員的值是依次加1的。值得注意的是:枚舉成員的值在不經(jīng)過(guò)顯式轉(zhuǎn)換前,是不會(huì)變換成整數(shù)值的,這也是上述程序中用兩條語(yǔ)句輸出枚舉成員yellow的值的用意所在。2023/2/496C#程序設(shè)計(jì)實(shí)用教程

7.3.2枚舉成員的賦值

2.為某一個(gè)枚舉成員賦值如果在定義枚舉類(lèi)型時(shí),直接為某個(gè)枚舉成員賦值,則其它枚舉成員依次取值,如下面的代碼所示:

enumcolor {yellow,brown,blue,red=5,black};上面的代碼中,為枚舉成員red直接賦給常量值5,如果把例7-9中枚舉類(lèi)型處的代碼進(jìn)行修改,運(yùn)行程序后,輸出的結(jié)果如下:2023/2/497C#程序設(shè)計(jì)實(shí)用教程

7.3.2枚舉成員的賦值

yellow=yellow yellow=0 brown=1 blue=2 red=5 black=6由此可知,如果為某一個(gè)(不是第1個(gè))枚舉成員賦值,則從第1個(gè)枚舉成員到被賦值的枚舉成員前的那個(gè)枚舉成員是按默認(rèn)方式賦值的,即第1個(gè)枚舉成員yellow的值為0,后面的枚舉成員則依次往上加1。特殊賦值的枚舉成員取賦給它的值,即red=5,它后面的枚舉成員則在所賦值的基礎(chǔ)上依次加1。2023/2/498C#程序設(shè)計(jì)實(shí)用教程

7.3.2枚舉成員的賦值

3.為多個(gè)枚舉成員賦值在定義枚舉類(lèi)型時(shí),還可以為所有枚舉成員賦值,此時(shí)可以不遵循按次序取值的原則。如下面的代碼所示: enumcolor {yellow,brown=2,blue,red=-4,black};上面的代碼中,為枚舉成員brown和red直接賦給常量值2和-4,如果把例7-9中枚舉類(lèi)型處的代碼進(jìn)行修改,運(yùn)行程序后,輸出的結(jié)果如下: yellow=yellow yellow=0 brown=2 blue=3 red=-4 black=-32023/2/499C#程序設(shè)計(jì)實(shí)用教程

7.3.2枚舉成員的賦值

由輸出結(jié)果可知:如果為某幾

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論