C第3章常用数据类型的用法课件

上传人:汽*** 文档编号:592183396 上传时间:2024-09-19 格式:PPT 页数:74 大小:334KB
返回 下载 相关 举报
C第3章常用数据类型的用法课件_第1页
第1页 / 共74页
C第3章常用数据类型的用法课件_第2页
第2页 / 共74页
C第3章常用数据类型的用法课件_第3页
第3页 / 共74页
C第3章常用数据类型的用法课件_第4页
第4页 / 共74页
C第3章常用数据类型的用法课件_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《C第3章常用数据类型的用法课件》由会员分享,可在线阅读,更多相关《C第3章常用数据类型的用法课件(74页珍藏版)》请在金锄头文库上搜索。

1、1 1第第3 3章章 常用数据常用数据类型的用法型的用法3.1 3.1 字符串字符串3.2 3.2 数数组3.3 3.3 枚枚举3.4 3.4 泛型泛型3.5 3.5 泛型集合泛型集合3.6 3.6 日期与日期与时间处理理3.7 3.7 数学运算数学运算3.8 3.8 随机数随机数2 2字符串是字符串是应用程序和用用程序和用户交互的主要方式,是交互的主要方式,是评价一个价一个编程程语言非常重要的内容。言非常重要的内容。.NET.NET提供了几个提供了几个类来快速来快速实现字符串字符串操作,包括操作,包括StringString、System.TextSystem.Text命名空命名空间等。等。

2、字符串是由一个或多个字符串是由一个或多个UnicodeUnicode字符构成的一字符构成的一组字符序列。字符序列。System.StringSystem.String是最常用的字符串操作是最常用的字符串操作类,可以帮助开,可以帮助开发者完者完成成绝大部分的字符串操作功能,使用方便。大部分的字符串操作功能,使用方便。3.1 3.1 字符串字符串3 33.1 3.1 字符串字符串1.1.字符串的字符串的创建与表示形式建与表示形式直接将字符常量直接将字符常量赋给字符串字符串类型型对象或者通象或者通过构造函数构造函数String类(string) :ustring myString = some te

3、xt; ustring s2 = new string(a,2); /结果果为aauString.Empty 表示空字符串表示空字符串uString类的表示方法的表示方法:string str = C:testfirst.cs string str = C:testfirst.cs u取字符串中的某个字符的方法取字符串中的某个字符的方法:char chFirst = myString2; /结果果为m 4 42. 2. 字符串比字符串比较比比较字符串是指按照字典排序字符串是指按照字典排序规则,判定两个字符的相,判定两个字符的相对大小。按照字典大小。按照字典规则,在一本英文字典中,出,在一本英文

4、字典中,出现在前在前面的面的单词小于出小于出现在后面的在后面的单词。在。在StringString类中,常用中,常用的比的比较字符串的方法包括字符串的方法包括CompareCompare、CompareToCompareTo、CompareOrdinalCompareOrdinal以及以及EqualsEquals3.1 3.1 字符串字符串5 53.1 3.1 字符串字符串2. 2. 字符串比字符串比较字符串比字符串比较方法方法uparepare(string s1,string s2string s1,string s2)CompareCompare方法是方法是StringString类的的

5、静静态方法,用于全面比方法,用于全面比较两个字符串两个字符串对象,包括象,包括6 6种重种重载方式。方式。 如果如果s1s1大于大于s2s2,结果果为1 1; 如果如果s1s1等于等于s2s2,结果果为0 0; 如果如果s1s1小于小于s2s2,结果果为-1-1。uparepare(string s1,string s2,bool string s1,string s2,bool ignoreCaseignoreCase) ignoreCase ignoreCase确定是否区分大小写确定是否区分大小写6 6CompareToCompareTo方法方法CompareToCompareTo方法将当

6、前字符串方法将当前字符串对象与另一个象与另一个对象做比象做比较,其作,其作用与用与CompareCompare类似,返回似,返回值也相同。区也相同。区别在于:在于:CompareToCompareTo不是静不是静态方法,可以通方法,可以通过一个一个StringString对象象调用;用;CompareToCompareTo没有重没有重载形式形式,只能按照大小写敏感方式比,只能按照大小写敏感方式比较两两个整串。个整串。string strA=Hello;string strA=Hello;string strB=World;string strB=World;Console.WriteLinpa

7、reTo(strB);/-1Console.WriteLinpareTo(strB);/-13.1 3.1 字符串字符串7 7EqualsEquals方法EqualsEquals方法用于方便地判定两个字符串方法用于方便地判定两个字符串是否相同是否相同,有两种,有两种重重载形式:形式: public bool Equals(string) public bool Equals(string) public public staticstatic boolEquals(string,string) boolEquals(string,string) 如果两个字符串相等,如果两个字符串相等,Equa

8、ls()Equals()返回返回值为TrueTrue;否;否则,返回返回FalseFalse。EqualsEquals方法的使用如下例所示。方法的使用如下例所示。/Equals/EqualsConsole.WriteLine(Console.WriteLine(String.EqualsString.Equals(strA,strB);/fals(strA,strB);/false eConsole.WriteLine(strA.Equals(strB);/falseConsole.WriteLine(strA.Equals(strB);/false3.1 3.1 字符串字符串8 8比比较运算

9、符运算符StringString支持两个比支持两个比较运算符运算符“=”=”、“!=”!=”,分,分别用于判用于判定两个字符是否相等和不等,并区分大小写。相定两个字符是否相等和不等,并区分大小写。相对于上面介于上面介绍的方法,的方法,这两个运算符使用起来更加直两个运算符使用起来更加直观和方便。和方便。下例中,使用下例中,使用“=”=”、“!=”!=”对“Hello”Hello”和和“World”World”进行比行比较。/=/=和和!=!=Console.WriteLine(strA=strB);/falseConsole.WriteLine(strA=strB);/falseConsole.

10、WriteLine(strA!=strB);/falseConsole.WriteLine(strA!=strB);/false3.1 3.1 字符串字符串9 92.StartWith/EndsWith2.StartWith/EndsWith方法方法StartWithStartWith方法可以判定一个字符串方法可以判定一个字符串对象是否以另一个子字象是否以另一个子字符串开符串开头,如果是返回,如果是返回TrueTrue;否;否则返回返回FalseFalse。其定。其定义为:Public bool StartsWith(string value)Public bool StartsWith(st

11、ring value)其中,参数其中,参数valuevalue即待判定的子字符串。即待判定的子字符串。/StartWith/StartWithConsole.WriteLine(strA.StartsWith(He);/trueConsole.WriteLine(strA.StartsWith(He);/trueConsole.WriteLine(strA.StartsWith(MM);/falseConsole.WriteLine(strA.StartsWith(MM);/false另外,另外,EndsWithEndsWith方法可以判定一个字符是否以另一个子字符方法可以判定一个字符是否以另

12、一个子字符串串结尾。尾。3.1 3.1 字符串字符串10103.1 3.1 字符串字符串 3. 3. 字符串字符串查找找uContainsContains方法:方法:用于用于查找一个字符串中是否包含指定的子字符找一个字符串中是否包含指定的子字符串。串。语法法为: public bool Contains( string value )public bool Contains( string value ) 例如:例如:string str1 = this is a string.;string str1 = this is a string.; bool b=str1.Contains(is

13、bool b=str1.Contains(is );); 1111uIndexOf方法:方法:求某个求某个字符或者子串字符或者子串在字符串中第一次出在字符串中第一次出现的的位置,位置,该方法区分大小写,并从字符串的首字符开始以方法区分大小写,并从字符串的首字符开始以计数。如果字符串中不包含数。如果字符串中不包含这个字符或子串,个字符或子串,则返回返回-1。u两种最常用的重两种最常用的重载形式:形式: public int IndexOf(string s ) public int IndexOf(string s, int startIndex )【例例】/IndexofConsole.Wri

14、teLine(strA.IndexOf(l);/23.1 3.1 字符串字符串1212LastIndexOfLastIndexOf方法:方法:LastIndexOfLastIndexOf方法的用法与方法的用法与IndexOfIndexOf方法方法相同,相同,查找找某个某个字符或者子串字符或者子串最后一次出最后一次出现的位置,但是此的位置,但是此方法从此方法从此实例的最后一个字符位置开始,从后向前例的最后一个字符位置开始,从后向前进行搜索,行搜索,直到找到直到找到 value value 或或检查到第一个字符位置,即搜索方向相到第一个字符位置,即搜索方向相反。反。【例例】 string strA

15、 = Hello; Console.WriteLine(strA.LastIndexOf(l);3.1 3.1 字符串字符串13133.1 3.1 字符串字符串IndexOfAny方法:方法: 功能同功能同IndexOf类似,区似,区别在于,可以搜索在一个字符串中,在于,可以搜索在一个字符串中,出出现在一个字符数在一个字符数组中的任意字符第一次出中的任意字符第一次出现的位置。同的位置。同样,该方法区分大小写,并从字符串的首字符开始以方法区分大小写,并从字符串的首字符开始以计数。如数。如果字符串中不包括果字符串中不包括这个字符或子串,个字符或子串,则返回返回-1。Iu查找某个字符串中是否包含某些

16、字符(多个不同的字符)。找某个字符串中是否包含某些字符(多个不同的字符)。 常用常用语法:法:public int IndexOfAny(char anyOf ) 例如:例如: string s1 = 123abc123abc123; char c = a, b, 5, 8 ; int x = s1.IndexOfAny(c); /x结果果为314143.1 3.1 字符串字符串4. 求子字符串求子字符串uSubstring(int startIndex) 截取从截取从startIndex开始到字符串开始到字符串结尾的字符串。尾的字符串。uSubstring(int startIndex,in

17、t count) 截取字符串从截取字符串从startIndex位开始,截取位开始,截取长度度为count的字符串。的字符串。 例如:例如: string str= abc123 ; string s1=str.Substring(2); /s1: c123 string ss = str.Substring(1,4); Console.WriteLine(ss);/bc12 15153.1 3.1 字符串字符串5. 5. 字符串的插入、字符串的插入、删除和替除和替换u插入字符串插入字符串InsertInsert方法用于在一个字符串的指定位置插入另一个字符串,方法用于在一个字符串的指定位置插入另

18、一个字符串,从而构造一个新的串。从而构造一个新的串。 语法形式:法形式: public string Insertpublic string Insert(int startIndex,string value)int startIndex,string value) 含含义:从从startIndexstartIndex开始插入子字符串开始插入子字符串valuevalue 例如:例如: string s1 = abcdabcd;string s1 = abcdabcd; string s2 = s1.Insert(2, 12);/ string s2 = s1.Insert(2, 12);/结

19、果果为ab12cdabcd ab12cdabcd 16163.1 3.1 字符串字符串u删除字符串除字符串两种常用形式:两种常用形式: 1 1)RemoveRemove(int startIndexint startIndex) 删除从除从startIndexstartIndex到字符串到字符串结尾的子字符串尾的子字符串 2 2)Remove(int startIndex,int count) Remove(int startIndex,int count) 删除从除从startIndexstartIndex开始的开始的countcount个字符。个字符。 例如例如: : string str

20、1 = this is a string.;string str1 = this is a string.; string s1=str1.Remove(2);/ s1 string s1=str1.Remove(2);/ s1结果果为thth Console.WriteLine(str1.Remove(1,2); Console.WriteLine(str1.Remove(1,2); / /结果果为ts is a string ts is a string 17173.1 3.1 字符串字符串u字符串替字符串替换 两种常用形式:两种常用形式:1 1)Replace (string oldSt

21、r,string newStr) Replace (string oldStr,string newStr) 2 2)ReplaceReplace(char oldCharchar oldChar,char newCharchar newChar)例如例如: : string str1 = this is a string.; string str1 = this is a string.; string s1=str1.Replace(a,b); string s1=str1.Replace(a,b); / /结果果为this is b string.this is b string. Co

22、nsole.WriteLine(str1.Replace(is,xy); Console.WriteLine(str1.Replace(is,xy); /结果果为thxy xy a stringthxy xy a string18183.1 3.1 字符串字符串6. 6. 移除首尾指定的字符移除首尾指定的字符u从字符串开从字符串开头或或结尾尾删除指定的字符除指定的字符 :利用利用TrimStartTrimStart删除字除字符串首部字符,利用符串首部字符,利用TrimEndTrimEnd删除字符串尾部字符,利用除字符串尾部字符,利用TrimTrim删除字符串首部和尾部一个或多个字符。除字符串首

23、部和尾部一个或多个字符。u其形式如下:public string Trim()public string Trim()public string Trim(paramschar trimChars)public string Trim(paramschar trimChars)其中,参数其中,参数trimCharstrimChars数数组包含了指定要去掉的字符,包含了指定要去掉的字符,如果缺省,如果缺省,则删除空格。除空格。1919【例例1 1】string s1 = string s1 = this is a book;this is a book;string s2 = that is a

24、 penstring s2 = that is a pen;string s3 = string s3 = is a penis a pen ; ;Console.WriteLine(Console.WriteLine(s1.TrimStart()s1.TrimStart(); /); /删除首部空格除首部空格Console.WriteLine(Console.WriteLine(s2.TrimEnd()s2.TrimEnd(); /); /删除尾部空格除尾部空格Console.WriteLine(Console.WriteLine(s3.Trim()s3.Trim(); /); /删除首部和

25、尾部空格除首部和尾部空格【例例2】char trimChars = , #, $, ;String strC = Hello# $;string newStr = strC.Trim(trimChars);Console.WriteLine(newStr);/HelloConsole.ReadLine();3.1 3.1 字符串字符串2020复制字符串复制字符串StringString类包括了复制字符串方法包括了复制字符串方法CopyCopy和和CopyToCopyTo,可以完成,可以完成对一个一个字符串及其一部分的复制操作。字符串及其一部分的复制操作。1.Copy1.Copy方法方法若想把一

26、个字符串复制到另一个字符串若想把一个字符串复制到另一个字符串实例中,可以使用例中,可以使用StringString的静的静态方法方法CopyCopy来来实现,其形式,其形式为:public string Copy(string str);public string Copy(string str);其中,参数其中,参数strstr为需要复制的源字符串,方法返回目需要复制的源字符串,方法返回目标字符串。字符串。3.1 3.1 字符串字符串2121下例中,把下例中,把strAstrA字符串字符串“Hello”Hello”复制到复制到newStrnewStr中。中。/Copy/CopynewStr=

27、;newStr=;newStr=String.Copy(strA);newStr=String.Copy(strA);Console.WriteLine(newStr);/Console.WriteLine(newStr);/CopyToCopyTo方法自己参考方法自己参考MSDNMSDN。3.1 3.1 字符串字符串22223.1 3.1 字符串字符串7. 7. 字符串的合并与拆分字符串的合并与拆分uJoinJoin方法方法:在数:在数组的每个元素之的每个元素之间串串联指定的分隔符,从而指定的分隔符,从而产生生单个串个串联的字符串。的字符串。 语法法为: public static stri

28、ng Join(public static string Join(string separator, string string separator, string value ) value )uSplitSplit方法方法:将字符串按照指定的一个或多个字符:将字符串按照指定的一个或多个字符进行分离,行分离,从而得到一个字符串数从而得到一个字符串数组。 常用常用语法法为: public string Split( params char separator )public string Split( params char separator )2323字符串的合并和拆分字符串的合并和拆分

29、举例例例如:例如:string sArray1 = 123, 456, abc ;string sArray1 = 123, 456, abc ;string s1 = string.Join(, sArray1); /string s1 = string.Join(, sArray1); /结果果为123,456,abc“123,456,abc“若若这样写写string s1 = string.Join(“”, sArray1); /string s1 = string.Join(“”, sArray1); /结果果为?string sArray2 = s1.Split(,); /sArra

30、y2string sArray2 = s1.Split(,); /sArray2得到的得到的结果与果与sArray1sArray1相同相同string s2 = abc 12;34,56;string s2 = abc 12;34,56;string sArray3 = s2.Split(, ;, ); /string sArray3 = s2.Split(, ;, ); /分隔符分隔符为逗号、分号、逗号、分号、空格空格Console.WriteLine(string.Join(Environment.NewLine,sArray3);Console.WriteLine(string.Join

31、(Environment.NewLine,sArray3);输出出结果:果:abcabc12123434565624243.1 3.1 字符串字符串8. 8. 字符串中字母的大小写字符串中字母的大小写转换uToUpperToUpper大写大写uToLowerToLower小写小写例如:例如:string s1 = This is a string;string s1 = This is a string;string s2 = s1.ToUpper( ); /s2string s2 = s1.ToUpper( ); /s2结果果为THIS IS A STRINGTHIS IS A STRING

32、string s3 = Console.ReadLine( );string s3 = Console.ReadLine( );if (s3.ToLower( ) = yes)if (s3.ToLower( ) = yes) Console.WriteLine(OK); Console.WriteLine(OK); 25259. String9. String和和StringBuilderStringBuilderuStringString类实际上表示的是一系列不可上表示的是一系列不可变的字符。的字符。说其其实例是例是“不可不可变的的”,是因,是因为无法直接修改无法直接修改给该字符串分配的堆中

33、字符串分配的堆中的字符串。例如,在的字符串。例如,在myStringmyString的后面接上另一个字符串:的后面接上另一个字符串: myString += and a bit more; myString += and a bit more; 其其实际操作并不是在原来操作并不是在原来myStringmyString所占内存空所占内存空间的后面直接附的后面直接附加上第二个字符串,而是返回一个新加上第二个字符串,而是返回一个新StringString实例,即重新例,即重新为新字符串分配内存空新字符串分配内存空间。uStringBuilderStringBuilder类位于位于System.Tex

34、tSystem.Text名称空名称空间下,使用下,使用StringBuilderStringBuilder类每次重新生成新字符串每次重新生成新字符串时不是再生成一个新不是再生成一个新实例,而是直接在原来字符串占用的内存空例,而是直接在原来字符串占用的内存空间上上进行行处理,理,而且它可以而且它可以动态的分配占用的内存空的分配占用的内存空间大小。大小。2626StringBuilderStringBuilder类用法用法举例例【例例3-13-1】StringBuilderStringBuilder类的基本用法。的基本用法。using System;using System;using Syste

35、m.Text;using System.Text;namespace StringBuilderExamplenamespace StringBuilderExample class Program class Program public static void Main( ) public static void Main( ) StringBuilder sb = new StringBuilder( ); StringBuilder sb = new StringBuilder( ); sb. sb.AppendAppend(string1);(string1); sb. sb.App

36、endLineAppendLine(string2);(string2); sb.Append(string3); sb.Append(string3); string s = sb. string s = sb.ToStringToString( );( ); Console.WriteLine(s); Console.WriteLine(s); Console.ReadLine( ); Console.ReadLine( ); 2727StringBuilderStringBuilder类用法用法总结常用方法常用方法AppendAppend: :追加字符串追加字符串AppendFormat

37、AppendFormat:追加格式化字符串:追加格式化字符串RemoveRemove(int startIndexint startIndex,int lengthint length):从:从StartIndexStartIndex位置开始移除位置开始移除长度度为lengthlength的字符串的字符串ToString()ToString()举例:例: StringBuilder builder = new StringBuilder();StringBuilder builder = new StringBuilder(); builder.Append(abc123); builder.

38、Append(abc123); builder.AppendFormat(0:d6,456); builder.AppendFormat(0:d6,456); builder.Remove(1,2); builder.Remove(1,2); builder.ToString();/ a123000456 builder.ToString();/ a1230004562828StringBuilderStringBuilder和和stringstring比比较在操作性能和内存效率方面,在操作性能和内存效率方面,StringBuilderStringBuilder要比要比StringString

39、好好得多,可以避免得多,可以避免产生太多的生太多的临时字符串字符串对象,特象,特别是是对于于经常重复常重复进行修改的情况更是如此。而另一方面,行修改的情况更是如此。而另一方面,StringString类提提供了更多的方法,可以使开供了更多的方法,可以使开发能能够更快地更快地实现应用。用。在两者的在两者的选择上,如果上,如果应用用对于系于系统性能、内存要求比性能、内存要求比较严格,以及格,以及经常常处理大理大规模的字符串,推荐使用模的字符串,推荐使用StringBuilderStringBuilder对象;否象;否则,可以,可以选择使用使用StringString。尤其是在数据尤其是在数据库查询

40、字符串拼接字符串拼接时,如果多个字符串拼接,如果多个字符串拼接,并且是并且是webweb服服务时,性能将大大,性能将大大优于于stringstring拼接。拼接。2929StringBuilderStringBuilder适用适用场合合uStringBuilderStringBuilder类适用于字符串适用于字符串连接操作比接操作比较多的情况下,它多的情况下,它可以大大提高系可以大大提高系统的性能。的性能。u性能性能测试对比:拼接从比:拼接从0 0开始的数字字符串,开始的数字字符串,观察所用的察所用的时间30303.2 3.2 数数组 u数数组用于存用于存储同一种同一种类型的数据。型的数据。u

41、数数组是一种引用是一种引用类型,而不是型,而不是值类型。型。u数数组是按照数是按照数组名、数据元素的名、数据元素的类型和型和维数来描述的。数来描述的。uC#C#中可以有一中可以有一维数数组、多、多维数数组、交、交错数数组。1.1.数数组的声明与初始化的声明与初始化 声明数声明数组时,既可以一开始就指定数,既可以一开始就指定数组元素的个数,也可以一元素的个数,也可以一开始不指定元素个数,而是在使用数开始不指定元素个数,而是在使用数组元素前元素前动态地指定元素地指定元素个数。个数。例如:例如:int a = new int30; int a = new int30; string mystring

42、 = first,second,third;string mystring = first,second,third;3131注意:不注意:不带newnew运算符的运算符的简化形式只能在声明化形式只能在声明语句中。句中。mystring = first, second, third ;mystring = first, second, third ;mystring =new string3 first, second, third ;mystring =new string3 first, second, third ;注意如果改注意如果改为new string2 “first”, “sec

43、ond”, new string2 “first”, “second”, “third” ;“third” ;将会出将会出现错误3.2 3.2 数数组 3232数数组的声明的声明语法法举例例 数组类型数组类型语法语法例子例子一维数组一维数组数据类型数据类型 数组变量;数组变量;int myArray;int myArray;二维数组二维数组数据类型数据类型, , 数组变量;数组变量;int, myArray;int, myArray;三维数组三维数组数据类型数据类型, , 数组变量;数组变量;int, myArray;int, myArray;交错数组交错数组数据类型数据类型 数组变量;数组变

44、量;int myArray;int myArray;3333数数组的秩与数的秩与数组长度度2.2.数数组的秩与数的秩与数组长度度数数组的秩(的秩(rankrank)是指数)是指数组的的维数,例如一数,例如一维数数组秩秩为1 1,二,二维数数组秩秩为2 2。数数组长度是指数度是指数组中所有元素的个数。例如:中所有元素的个数。例如:int a = new int10; /int a = new int10; /数数组长度度为1010int, b = new int3, 5; /int, b = new int3, 5; /数数组长度度为3*5=153*5=15,其中第,其中第0 0维长度度为3 3

45、,第,第1 1维长度度为5 5ArrayArray类提供提供访问秩和秩和长度的属性和方法。度的属性和方法。(1 1)RankRank属性属性(2 2)LengthLength属性属性(3 3)GetLengthGetLength(i i) 获取数取数组某一某一维的的长度。度。3434数数组用法用法举例例【例例3-23-2】编写一个控制台写一个控制台应用程序,定用程序,定义一个二一个二维数数组,分,分别输出数出数组的秩、数的秩、数组长度以及数度以及数组中的每个元素中的每个元素值。3535数数组3.3.一一维数数组在在C#C#中,数中,数组的下的下标默默认是从是从0 0开始索引的。开始索引的。Le

46、ngthLength属性表示数属性表示数组的的长度。度。4.4.多多维数数组多多维数数组指指维数大于数大于1 1的数的数组,常用的是二,常用的是二维数数组和三和三维数数组。C#C#语言支持两种言支持两种类型的二型的二维数数组,一种是二,一种是二维矩形数矩形数组,另一种,另一种是二是二维交交错数数组。对于二于二维矩形数矩形数组,数,数组中的每一行都有相同的列数。中的每一行都有相同的列数。例如:例如:int, n2 = new int, 1, 2, 3, 4, 5, 6 ;int, n2 = new int, 1, 2, 3, 4, 5, 6 ;3636数数组5.5.交交错数数组交交错数数组相当于

47、一相当于一维数数组的每一个元素又是一个数的每一个元素又是一个数组,也可以把,也可以把交交错数数组称称为“数数组的数的数组”。例如:例如:int n1 = new int2 int n1 = new int2 new int 2,4,6, new int 2,4,6, new int 1,3,5,7,9 new int 1,3,5,7,9;交交错数数组的每一个元素既可以是一的每一个元素既可以是一维数数组,也可以是多,也可以是多维数数组。3737交交错数数组用法用法举例例【例例3-33-3】交交错数数组的用法。的用法。3838数数组6.6.动态改改变数数组的大小的大小ResizeResize方法方

48、法 public static void Resize( ref T array, int public static void Resize( ref T array, int newSize )newSize ) 这是一种泛型表示形式。其中是一种泛型表示形式。其中T T表示数表示数组类型,型,arrayarray为要要调整大小整大小的一的一维数数组,该数数组从零开始;如果从零开始;如果为nullnull则新建具有指定大小的新建具有指定大小的数数组。如果。如果newSizenewSize大于旧数大于旧数组的的LengthLength,则分配一个新数分配一个新数组,并将,并将所有元素从旧数所有

49、元素从旧数组复制到新数复制到新数组。如果。如果newSizenewSize小于旧数小于旧数组的的LengthLength,则分配一个新数分配一个新数组,并将元素从旧数,并将元素从旧数组复制到新数复制到新数组直到新数直到新数组被填被填满为止;旧数止;旧数组中的剩余元素将被忽略。如果中的剩余元素将被忽略。如果 newSizenewSize与旧数与旧数组的的 LengthLength相等,相等,则此方法不此方法不执行任何操作。行任何操作。3939动态改改变数数组的大小的大小举例例【例例3-43-4】演示如何演示如何动态改改变一一维数数组的大小。的大小。4040数数组7.7.数数组元素的排序与元素的排

50、序与查找找mC#C#语言中言中还提供了提供了SortSort静静态方法,用快速排序算法将一方法,用快速排序算法将一维数数组中的元素按照升序。中的元素按照升序。数数组的的SortSort方法使用格式方法使用格式为: Array.Sort( Array.Sort(数数组名称名称););4141数数组与与数数组列列表表中中还有有一一个个ReverseReverse(反反转)方方法法,将将该方方法与法与SortSort方法方法结合,可以合,可以实现降序排序。降序排序。数数组反反转方法的使用格式方法的使用格式为:u Array.Reverse Array.Reverse( (数数组名称名称, ,起始位置

51、起始位置, ,反反转范范围););【例例】A Array.Reverserray.Reverse( ( myArray, myArray, 1, 1, 3 3 ););将将myArraymyArray中中下下标从从1 1开始的开始的3 3个数个数组元素反元素反转uArray.Reverse(Array.Reverse(数数组名称)名称)数数组4242【补充例充例题】利用利用SortSort和和ReverseReverse实现数数组的降序排序。的降序排序。数数组解解题思路:先利用思路:先利用sortsort方法将数方法将数组升序排序,然后使用升序排序,然后使用reversereverse方法反方

52、法反转即可即可实现降序排序。降序排序。4343数数组排序和排序和查找找举例例【例例3-53-5】一一维数数组的排序和的排序和查找。找。4444数数组的的统计以及数以及数组和字符串和字符串间的的转换利用数利用数组的的AverageAverage方法、方法、SumSum方法、方法、MaxMax方法和方法和MinMin方法可以方法可以求数求数组中所有元素的平均中所有元素的平均值、求所有元素的和、最大、求所有元素的和、最大值和最和最小小值。对于字符串数于字符串数组,可以直接利用字符串的,可以直接利用字符串的JoinJoin方法和方法和SplitSplit方法方法实现字符串和字符串数字符串和字符串数组之

53、之间的的转换。4545数数组元素元素统计和字符串和字符串转换举例例【例例3-63-6】演示如何演示如何统计数数组中的元素以及如何中的元素以及如何实现数数组和字和字符串之符串之间的的转换。46463.3 3.3 枚枚举u枚枚举(enumenum)是一)是一组命名常量的集合,称命名常量的集合,称为枚枚举成成员列表。它列表。它可以可以为一一组在在逻辑上密不可分的上密不可分的整数整数值提供便于提供便于记忆的符号,的符号,从而使代从而使代码更清晰,也易于更清晰,也易于维护。u声明声明enumenum类型型变量的量的语法法为: 附加声明附加声明 访问修修饰符符 enum enum 名称名称:基本基本类型型

54、 枚枚举列列表表 基本基本类型指的是型指的是8 8中整型中任何一种整型,默中整型中任何一种整型,默认为intint。定。定义枚枚举时,用冒号来指定是哪种基本,用冒号来指定是哪种基本类型。不能是除此之外的其他型。不能是除此之外的其他类型。型。enum days : double mon, tue, wed ;enum days : double mon, tue, wed ; 4747u定定义枚枚举的位置:的位置:可以可以将其定将其定义在命名空在命名空间的下面或的下面或类的内的内部,但是不能定部,但是不能定义在方法内部。在方法内部。例如:例如:enum daysenum daysMon,TueM

55、on,Tue,WedWed,ThuThu,FriFri,Sat,SunSat,Sun; ; 注意注意:enum daysenum days:bytebyteX1=255,X2 ;/X1=255,X2 ;/错误u枚枚举的使用的使用 例如:例如:days day=days.Sat;days day=days.Sat;3.3 3.3 枚枚举4848枚枚举类型(型(续)EnumEnum结构构GetNames GetNames 检索指定枚索指定枚举中常数名称的数中常数名称的数组 GetName GetName 在指定枚在指定枚举中中检索具有指定索具有指定值的常数的名称的常数的名称GetValues Ge

56、tValues 检索指定枚索指定枚举中常数中常数值的数的数组。例子:例子: enum Colors Red, Green, Blue, Yellow ; enum Colors Red, Green, Blue, Yellow ; foreach(string s in foreach(string s in Enum.GetNamesEnum.GetNames(typeof(Colors)(typeof(Colors) Console.WriteLine(s); Console.WriteLine(s); foreach(int i in foreach(int i in Enum.GetV

57、aluesEnum.GetValues(typeof(Colors)(typeof(Colors) Console.WriteLine(i); Console.WriteLine(i); Console.WriteLine( Console.WriteLine(Enum.GetNameEnum.GetName(typeof(Colors), 3 ); (typeof(Colors), 3 ); 4949enum是一个是一个C#关关键字字,是是c/c+/c#等等c语系系语言一种关言一种关键字,字,用于定用于定义枚枚举类型。型。Enum其其实就是就是System.Enum,是枚是枚举的的类型型实现

58、,是一个抽象是一个抽象类(abstract class),所有枚),所有枚举类型都直接型都直接继承自它承自它 。枚枚举类型(型(续)50503.4 3.4 泛型泛型泛型(泛型(GenericGeneric)是具有占位符()是具有占位符(类型参数)的型参数)的类、结构、接构、接口和方法,它与普通口和方法,它与普通类的区的区别是泛型多了一个或多个表示是泛型多了一个或多个表示类型的型的占位符,占位符,这些占位符用尖括号括起来。些占位符用尖括号括起来。通通过参数化参数化类型来型来实现在同一份代在同一份代码上操作多种数据上操作多种数据类型。型。利用利用“参数化参数化类型型”将将类型抽象化,从而型抽象化,

59、从而实现灵活的复用。灵活的复用。例如:例如:class Testclass Test public T obj; public T obj; public Test(T obj) public Test(T obj) this.obj = obj; this.obj = obj; 5151class Programclass Program static void Main(string args) static void Main(string args) int obj = 2; int obj = 2; Test test = new Test(obj); Test test = new

60、 Test(obj); Console.WriteLine(int: + test.obj); Console.WriteLine(int: + test.obj); string obj2 = hello world; string obj2 = hello world; Test test1 = new Test(obj2); Test test1 = new Test(obj2); Console.WriteLine(String: + test1.obj); Console.WriteLine(String: + test1.obj); Console.Read(); Console.

61、Read(); 3.4 3.4 泛型泛型输出出结果是:果是:int:2String:hello world5252程序分析:程序分析:1 1、TestTest是一个泛型是一个泛型类。T T是要是要实例化的范型例化的范型类型。如果型。如果T T被被实例化例化为intint型,那么成型,那么成员变量量objobj就是就是intint型的,如果型的,如果T T被被实例化例化为stringstring型,那么型,那么objobj就是就是stringstring类型的。型的。2 2、 根据不同的根据不同的类型,上面的程序型,上面的程序显示出不同的示出不同的值。C#C#泛型机制:泛型机制:C#C#泛型能力

62、有泛型能力有CLRCLR在运行在运行时支持:支持:C#C#泛型代泛型代码在在编译为ILIL代代码和元数据和元数据时,采用特殊的占位符来表示范型,采用特殊的占位符来表示范型类型,并用型,并用专有的有的ILIL指令支持泛型操作。而真正的泛型指令支持泛型操作。而真正的泛型实例化工作以例化工作以“on-on-demanddemand”的方式,的方式,发生在生在JITJIT编译时。反反编译看中看中间代代码泛型泛型5353泛型泛型【例例3-83-8】演示泛型的定演示泛型的定义与用法。与用法。5454可空泛型可空泛型可空可空类型是泛型型是泛型结构构NullableNullable的的实例。例。 例如例如,N

63、ullableNullable读作作“可以可以为nullnull的的Int32”Int32”,可以将,可以将其其赋值为赋值为任一个任一个3232位整数位整数值,也可以将其,也可以将其赋值为nullnull值。可空可空类型具有以下特性:型具有以下特性: (1 1)可空)可空类型表示可被型表示可被赋值为nullnull值的的值类型型变量。量。 注意:不能写注意:不能写stringstring?或?或NullableNullable (2 2)语法法“T?T?”是泛型是泛型“NullableNullable”的的简写,此写,此处的的T T为值类型。型。这两种形式可以互两种形式可以互换。如。如Null

64、ableNullable也可以写也可以写为int?int?。 例如:例如: intint? number=0number=0; Nullable number=0; Nullable number=0; 二者是等价的二者是等价的 。 5555可空泛型可空泛型(3 3)程序)程序员可以使用泛型的可以使用泛型的HasValueHasValue和和ValueValue只只读属性属性测试是否是否为空和空和检索索值,如果此,如果此变量包含量包含值,则HasValueHasValue属性返回属性返回TrueTrue;如果此;如果此变量的量的值为空,空,则返回返回FalseFalse。 例如:例如:int?

65、 number=5;int? number=5; if (number.HasValue) if (number.HasValue) Console.WriteLine(number.Value);/5 Console.WriteLine(number.Value);/5 可以利用可空可以利用可空类型型变量提供的量提供的GetValueOrDefaultGetValueOrDefault方法,返回方法,返回该类型的型的值或默或默认值。 例如:例如:int y=number.GetValueOrDefault();int y=number.GetValueOrDefault(); 使用使用“?”

66、运算符可以运算符可以给可空可空类型分配默型分配默认值。 例如:例如:int y1 = number ? -1;int y1 = number ? -1;56563.5 3.5 泛型集合泛型集合在在System.Collections.GenericSystem.Collections.Generic命名空命名空间下,提供了常用的泛下,提供了常用的泛型集合型集合类。泛型集合类非泛型集合类泛型集合用法举例ListArrayListList dinosaurs = new List( );DictionaryHashtableDictionary d = new Dictionary( );d.Ad

67、d (txt, notepad.exe);QueueQueueQueue q = new Queue( );q.Enqueue(one);StackStackStack s = new Stack( );s.Push(one);s.Pop( );SortedListSortedListSortedList list = new SortedList( );list.Add (txt, notepad.exe); list.TryGetValue(tif, out value)57571. 1. 哈希集合哈希集合HashSetHashSet泛型泛型类提供了高性能的数学集合运算,一个提供了高性能的

68、数学集合运算,一个HashSetHashSet对象的容量是指象的容量是指该对象可以容象可以容纳的元素个数。的元素个数。常用方法:常用方法:mUnionWithUnionWith方法:并集或方法:并集或SetSet加法加法mIntersectWithIntersectWith方法:交叉方法:交叉mExceptWithExceptWith方法:方法:setset减法减法mSymmetricExceptWithSymmetricExceptWith方法:余集方法:余集5858HashSetHashSet举例例string arr1 = a, b, c ;string arr1 = a, b, c ;

69、HashSet h1 = new HashSet(arr1);HashSet h1 = new HashSet(arr1);string arr2 = c, d, e ;string arr2 = c, d, e ;HashSet h2 = new HashSet(arr2);HashSet h2 = new HashSet(arr2);h1.UnionWith(h2);/h1.UnionWith(h2);/并集并集Console.WriteLine(h1Console.WriteLine(h1和和h2h2执行完并集操作之后,行完并集操作之后,h1h1集合元素集合元素为:);:);foreac

70、h (string x in h1)foreach (string x in h1) Console.Write(0+ ,x); Console.Write(0+ ,x); Console.ReadLine(); Console.ReadLine();HashSetHashSet是一个是一个SetSet集合,集合,查询上有上有较大大优势,但无法通,但无法通过下下标方式来方式来访问单个元素,个元素,59592.2.列表和排序列表列表和排序列表u列表是一系列元素的列表是一系列元素的组合,列表中可以有重复的元素。合,列表中可以有重复的元素。uListList泛型泛型类表示可通表示可通过索引索引访问的

71、的强类型型对象列表,象列表,该类提供了提供了对列表列表进行搜索、排序和操作的方法。行搜索、排序和操作的方法。常用方法如下:常用方法如下:mAddAdd方法:将指定方法:将指定值的元素添加到列表中。的元素添加到列表中。mInsertInsert方法:在列表的中方法:在列表的中间插入一个新元素。插入一个新元素。mContainsContains方法:方法:测试该列表中是否存在某个元素。列表中是否存在某个元素。mRemoveRemove方法:从列表中移除方法:从列表中移除带有指定有指定键的元素。的元素。mClearClear方法:移除列表中的所有元素。方法:移除列表中的所有元素。uSortedLis

72、tTSortedListV排序列表,用法与排序列表,用法与ListList类似。似。6060列表和排序列表列表和排序列表举例例【例例3-93-9】演示泛型列表的定演示泛型列表的定义与用法。与用法。61613. 3. 链表表LinkedListLinkedList为双向双向链表。表。LinkedListLinkedList对象中的每个象中的每个节点都属于点都属于LinkedListNodeLinkedListNode类型。每个型。每个节点又指向其点又指向其NextNext节点和点和PreviousPrevious节点。点。LinkedListLinkedList接受接受 nullnull引用作引

73、用作为引用引用类型的有效型的有效ValueValue属属性,并且允性,并且允许重复重复值。如果如果LinkedListLinkedList为空,空,则FirstFirst和和LastLast属性属性为nullnull。例如:例如:string words = a, b, c ;string words = a, b, c ;LinkedList sentence = new LinkedList sentence = new LinkedList(words);LinkedList(words);sentence.AddFirst(dog); /sentence.AddFirst(dog);

74、/结果果为dog,a,b,cdog,a,b,c,62624.4.字典和排序字典字典和排序字典uDictionaryDictionary泛型泛型类提供了从一提供了从一组键到一到一组值的映射。字典中的每个添加的映射。字典中的每个添加项都由一个都由一个值及其相关及其相关联的的键组成,通成,通过键来来检索索值。注意:一个字典中不能有重复的注意:一个字典中不能有重复的键。该泛型泛型类提供的常用方法如下。提供的常用方法如下。AddAdd方法:将方法:将带有指定有指定键和和值的元素添加到字典中。的元素添加到字典中。TryGetValueTryGetValue方法:方法:获取与指定的取与指定的键相关相关联的的

75、值。ContainsKeyContainsKey方法:确定字典中是否包含指定的方法:确定字典中是否包含指定的键。RemoveRemove方法:从字典中移除方法:从字典中移除带有指定有指定键的元素。的元素。uSorted DictionarySorted Dictionary泛型泛型类用法与字典的用用法与字典的用法相同,区法相同,区别在于其保存按在于其保存按键进行升序排序后的行升序排序后的结果。果。63635. 5. 队列列uQueueQueue泛型泛型类表示表示对象的先象的先进先出集合。先出集合。队列在按接收列在按接收顺序存序存储消息方面非常有用,存消息方面非常有用,存储在在队列中的列中的对象

76、在一端插入,象在一端插入,从另一端移除。从另一端移除。u队列列可以保存可以保存nullnull值并且允并且允许有重复的元素。有重复的元素。常用方法如下:常用方法如下:EnqueueEnqueue方法方法:将指定元素插入列尾。:将指定元素插入列尾。DequeueDequeue方法方法:队列首元素出列。列首元素出列。例如:例如:Queue numbers = new Queue( );Queue numbers = new Queue( );numbers.Enqueue(one);numbers.Enqueue(one);numbers.Enqueue(two);numbers.Enqueue(

77、two);numbers.Dequeue( );/numbers.Dequeue( );/移除第一个元素移除第一个元素64646. 6. 堆堆栈uStackStack泛型泛型类表示同表示同类型型实例的大小可例的大小可变的后的后进先出先出(LIFOLIFO)集合。)集合。u堆堆栈可以保存可以保存nullnull值并且允并且允许有重复有重复值。常用方法如下:常用方法如下:PushPush方法:方法:将指定元素插入将指定元素插入栈顶。PopPop方法:方法:弹出出栈顶元素。元素。例如:例如:Stack numbers = new Stack( );Stack numbers = new Stack(

78、 );numbers.Push(one);numbers.Push(one);numbers.Push(two);numbers.Push(two);String str=numbers.Pop( );/strString str=numbers.Pop( );/str的的值为“two”;two”;65653.63.6日期与日期与时间处理理对日期和日期和时间处理的常用理的常用类是是DateTimeDateTime类和和TimeSpanTimeSpan类。DateTimeDateTime类表示范表示范围在在00010001年年1 1月月1 1日午夜日午夜12:00:0012:00:00到到999

79、99999年年1212月月3131日晚上日晚上11:59:5911:59:59之之间的日期和的日期和时间,最小,最小时间单位等位等于于100100纳秒。秒。TimeSpanTimeSpan类表示一个表示一个时间间隔。其范隔。其范围在在Int64.MinValueInt64.MinValue到到Int64.MaxValueInt64.MaxValue之之间。 例如:例如:DateTime dt1=new DateTime(2009,10,1);DateTime dt1=new DateTime(2009,10,1); DateTime dt2=new DateTime(2009,8,1); Da

80、teTime dt2=new DateTime(2009,8,1); TimeSpan ts=dt1-dt2; TimeSpan ts=dt1-dt2; Console.WriteLine(ts.Days);/61 Console.WriteLine(ts.Days);/616666DateTimeDateTime类常用方法和属性常用方法和属性静静态方法和属性方法和属性DateTime.NowDateTime.NowDateTime.TodayDateTime.Todaypare(DateTime dt1pare(DateTime dt1,DateTime dt2)DateTime dt2)D

81、ateTime.Parse(string str)DateTime.Parse(string str)实例方法和属性例方法和属性( (假假设dtdt为DateTimeDateTime的一个的一个实例)例)dt.Day,dt.Month,dt.Year,dt.Hourdt.Day,dt.Month,dt.Year,dt.Hourdt.ToLongDateString(),dt.ToShortDateString()dt.ToLongDateString(),dt.ToShortDateString()dt.ToString(“yyyy-mm-dd”)/dt.ToString(“yyyy-mm-d

82、d”)/多种形式多种形式dt.CompareTo(DateTime dt1)dt.CompareTo(DateTime dt1)67673.6 3.6 日期与日期与时间处理理举例例【例例3-103-10】DateTimeDateTime类的用法的用法举例。例。【例例3-113-11】显示当前日期和示当前日期和时间。68683.7 3.7 数学运算数学运算MathMath类位于位于SystemSystem命名空命名空间下,下,为三角函数、三角函数、对数函数和其他通数函数和其他通用数学函数提供常数和静用数学函数提供常数和静态方法。方法。例如:例如: int i = 10, j = -5;int i

83、 = 10, j = -5; double x = 1.3, y = 2.7; double x = 1.3, y = 2.7; double a = 2.0, b = 5.0; double a = 2.0, b = 5.0; Console.WriteLine(string.Format(-5 Console.WriteLine(string.Format(-5的的绝对值为0, 0, Math.Abs(j)Math.Abs(j);); Console.WriteLine(string.Format( Console.WriteLine(string.Format(大于等于大于等于1.31.

84、3的最小整的最小整数数为0, 0, Math.Ceiling(x);Math.Ceiling(x); Console.WriteLine(string.Format( Console.WriteLine(string.Format(小于等于小于等于2.72.7的最大整的最大整数数为0, 0, Math.Floor(y);Math.Floor(y); 6969MathMath类(续) Console.WriteLine(string.Format(10 Console.WriteLine(string.Format(10和和-5-5的的较大者大者为0, 0, Math.Max(i, j);Mat

85、h.Max(i, j); Console.WriteLine(string.Format(1.3 Console.WriteLine(string.Format(1.3和和2.72.7的的较小者小者为0, 0, Math.Min(x, y);Math.Min(x, y); Console.WriteLine(string.Format(2 Console.WriteLine(string.Format(2的的5 5次方次方为0, 0, Math.Pow(a, Math.Pow(a, b);b); Console.WriteLine(string.Format(1.3 Console.Write

86、Line(string.Format(1.3的四舍五入的四舍五入值为0, 0, Math.Round(x);Math.Round(x); Console.WriteLine(string.Format(5 Console.WriteLine(string.Format(5的平方根的平方根为0, 0, Math.Sqrt(b);Math.Sqrt(b); Console.ReadLine(); Console.ReadLine(); 70703.8 3.8 随机数随机数RandomRandom类用于生成随机数。用于生成随机数。默默认情况下,情况下,RandomRandom类的无参数构造函数使用系

87、的无参数构造函数使用系统时钟生成其生成其种子种子值,而参数化构造函数可根据当前,而参数化构造函数可根据当前时间的刻度数采用的刻度数采用Int32Int32值。常用方法:常用方法: Random r = new Random( ); Random r = new Random( ); int i=r.Next(10); int i=r.Next(10); double d = r.NextDouble();/ double d = r.NextDouble();/返回返回0.01.00.01.0之之间的随机数的随机数71713.8 3.8 随机数随机数【例例3-133-13】RandomRand

88、om类的基本用法。的基本用法。7272本章涉及的面本章涉及的面试题目目Question 33. (Question 33. (单选) )(雅虎公司雅虎公司)int myArray3=new int3int myArray3=new int3 new int35,6,2,new int56,9,7,8,3,new new int35,6,2,new int56,9,7,8,3,new int23,2; myArray322int23,2; myArray322的的值是()。是()。1. 91. 92. 22. 23. 63. 64. 4. 越界越界请详述在述在.NET.NET中中类(class)

89、(class)与与结构构(struct)(struct)的异同的异同 (10(10分分) ) ( (某某ITIT公司公司) )7373本章涉及的面本章涉及的面试题目(目(续)以下枚以下枚举型的定型的定义,其中,其中错误的用法有(的用法有() (某某ITIT公司公司) a) public enum var1 Mike = 100, Nike = 102, Jike a) public enum var1 Mike = 100, Nike = 102, Jike b) public enum var1:byte Mike = 1000, Nike, Jike b) public enum var1

90、:byte Mike = 1000, Nike, Jike c) public enum var1 Mike=10, Nike, Jike c) public enum var1 Mike=10, Nike, Jike d) public enum var1 Mike , Nike , Jike d) public enum var1 Mike , Nike , Jike 判断下列判断下列说法是否正确(法是否正确(某某ITIT公司公司)(1)1)在在C#C#中,装箱操作是将中,装箱操作是将值类型型转化成化成ObjectObject类型。型。(2)2)在在C#C#中,中,intint是定是定义一个一个intint型的二型的二维数数组。7474本章作本章作业及及实验P64P641 1、2 2、4 4实验三三

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号