《C#学习笔记(个人).pdf》由会员分享,可在线阅读,更多相关《C#学习笔记(个人).pdf(154页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、、c#基础知识Q)1、C#中 foreach 用法f o r ea c h循环用于列举出集合中所有的元素,f o r ea c h语句中的表达式由关键字i n隔开的两个项组成。i n右边的项是集合名,i n左边的项是变量名,用来存放该集合中的每个元素。该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为t r u e,f o r ea c h块中的语句就能够执行。一旦集合中的元素都已经被访问到,整个表达式的值为f a l s e,控制流程就转入到f o r ea c h块后面的执行语句。f o r ea c h语句经常与数组一起使用,
2、下面实例将通过f o r ea c h语句读取数组的值并进行显示。数组的属性:A r r a y.L en g t h数组的容量利用这个属性,我们可以取得数组对象允许存储的容量值,也就是数组的长度、元素个数,这个比较好理解,数组还有其他的属性,比如数组的维数等,属性的用法比较简单,学会一种,其他的格式基本一致,这里我们就不举例了。当数组的维数、容量较多时,C#提供了 f o r ea c h语句,专门用来读取集合/数组中的所有元素,我们把这种功能叫做遍历。语法书写如下:遍历数组:f o r ea c h (t y p e o b j N a m e i n c o l l ec t i o n
3、/A r r a y)这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的t y p e是你所要读取的数组对象将要存储在o b j N a m e变量的数据类型,而o b j N a m e是定义了一个t y p e类型的变量名,代表每一次从集合和数组(c o l l ec t i o n/A r r a y)中取得的元素,c o l l ec t i o n/A r r a y则是所要存取的数组对象。用这种方法只需写一个f o r ea c h就可以遍历出除交错数组以外的所有维数的数组。例子:用f o r ea c h循环一次性遍历a数组i n t ,a =n ew i n t
4、 2,2,2 1,2 ,3,4,5,6 ,7,8 ;定义一个2行2列2纵深的3维数组af o r ea c h(i n t i i n a)C o n s o l e.Wr i t eL i n e(i);这两种代码执行的结果是一样的都是每行一个元素,共 8 行,元素分别是1234 5 6 7 8string口数组里面是存放strin g 型的值,List string是存放strin g 类型的对象2、C#中的 InitializeComponent。方法lnitializeComponent()用于初始化窗体上控件。在每个窗体生成的时候,都会针对于当前的窗体定义InitializeComp
5、onent。方法,该方法实际上是由系统生成的对于窗体界面的定义方法。位于.cs文件之中的InitializeComponent。方法public Form011()lnitializeComponent();)在每一个Form文件建立后,都会同时产生程序代码文件.CS文件,以及与之相匹配的.Designer.CS文件,业务逻辑以及事件方法等被编写在C S 文件之中,而界面设计规则被封装在.Designer.CS文件里,下面代码为.Designer.CS文件的系统自动生成的脚本代码。namespace Example_FormTestpartial class frmStudent(/必需的设计
6、器变量。/private System.ComponentModeLIContainer components=null;/清理所有正在使用的资源。/protected override void Dispose(bool disposing)if(disposing&(components!=null)components.Dispose();)base.Dispose(disposing);)#region Windows窗体设计器生成的代码/设计器支持所需的方法不要/使用代码编辑器修改此方法的内容。/private void lnitializeComponent()(this.Susp
7、endLayout();/frmStudent/this.AutoScaleDimensions=new System.Drawing.SizeF(6F,12F);this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;this.ClientSize=new System.Drawing.Size(292,273);this.Name=frmStudenC;this.Text=学生信息”;this.MouseClick+=newSystem.Windows.Forms.MouseEventHandler(this.frmStuden
8、t_MouseClick);this.KeyPress+=newSystem.Windows.Forms.KeyPressEventHandler(this.frmStudent_KeyPress);this.ResumeLayout(false);)#endregion)在代码之中,可以很容易发现InitializeComponent。方法和Dispose。方法,前者为界面设计的变现内容,后者为表单释放系统资源时候执行编码。lnitializeComponent()方法反映了窗体设计器中窗体和控件的属性。通常不会在世界上个文件中修改代码。如果更改InitializeComponent。方法中
9、的相关属性参数,在窗体设计器界面上也会显示出来。我们发现建个c#窗体项目,在 Form1.cs和 Form1.Designer.cs里分别有 个InitializeComponent。函数Form1.Designer.cs里 的 是 定 义(函数名后面有大括号包含定义内容)Form1.cs里 的 是 调 用(函数名后面分号结尾)partial表示以下创建的是分布类代码也就是说一个类的定义代码 可以写在两个不同的页面Form1.cs 和 Form1.Designer.cs注意:IrdtializeComponent。方法写在前面和后面是有区别的。InitializeComponent。方法是用来
10、初始化窗体组件的,在 InitializeComponent之前,窗体的各个控件还没有进行初始化,比如说窗体上有一个TextBoxUserName,在 InitializeComponent之前它还只是一个TextBox类型的变量而已,如果在IrdtializeComponent之前调用这个TextBox的属性或方法,就会出错。再比如说你拖上取一个TextBox,它放在Form的位置,TextBox的一些属性。包括new 这个TextBox都放在那个函数里面处理的。我们可以看一下Form.Designer.cs,在那里找到InitializeComponent方法,您会发现窗体对象的初始化都是
11、在那里做的。3 C#里面的#region是什么意思?S region是c#预处理器指令。#re g io n是一个分块预处理命令,它主要用于编辑代码的分段,在编译时会被自动删除。#region使你可以在使用VS代码编辑器的大纲显示功能时指定可展开或折叠的代码块。例如:El#region M y C l a s s d e f i ni t i o nI p u b l i c c l a s s M y C l a s s由s t a t i c v o i d M a i n()由 (卜 )卜#e nd r e g i o n备注:#r e g i o n块必须以#e nd r e g i
12、o n指令终止。#r e g i o n块不能V#i f 块重叠。但是,可以将#r e g io n块嵌套在#1 块内,或将#if 块嵌套在#r e g io n块内。使用#region就是将一些有关联的代码组织在一起,然后折叠起来。这样你就在一个函数中看不到很长的令人头痛的代码段。当然这段代码很简单。在实际项目中,你可能看到上百行甚至更多的代码在一个#region中。如果把它折叠起来。看起来就会很整洁。re g io n不适合在大方法中使用,当你在 一 个方法中使用#re g io n的时候,停下来想想你刚刚写了什么代码?大多数时候,你可以将这些代码段独立成一个函数。4、C#中this的作用
13、在 C M ,th is 关键字代表当前实例,我们可以用th is.来调用当前实例的成员方法,变量,属性,字段等;也可以用th is 来做为参数状当前实例做为参数传入方法.还可以通过th is 来声明索引器。下面介绍C#中th is 的作用一、C#th is 指针的几种用法1、限定被相似的名称隐藏的成员C#代 码 复制p u b lic c la s s T h is N a me白IIIp u b lic s tr ing na me =张三”;p u b lic int nu m=5 5;p u b lic T h is N a me()p u b lic v o id G e tT h
14、is N a me(s tr ing na me,int nu m)(na me =th is,na me;调取全局变量 na menu m=th is,nu m;调取全局变量nu mH ttp C o nte x t.C u r r e nt.R e s p o ns e.W r ite (参数 na me 的值为:+na me+”;参数nu m的值为:+nu m);输出结果为 参数na me 的值为张.七参数 nu m值为:5 5”L2、将对象作为参数传递到别的方法中C#代 码 复制p u b lic c la s s T h is F Fp u b lic T h is F F()卜 )
15、Ip u b lic s tr ing s h u ju()I由 II r e tu r n T h is指针当做方法传递“;I卜 )Ip u b lic v o id f l(T h is F F f f)I白 IH ttp C o nte x t.C u r r e nt.R e s p o ns e.W r ite(f f.s h u ju();I卜 )Ip u b lic v o id f()I由 If l(th is);th is 在这里可以理解为 T h is F F f f=ne ws T h is F F();当前类的实例I卜 )IL T h is F F f f=ne ws
16、T h is F F。;方法实例f f.f ();调用方法 输出结果为:T h is指针当做方法传递3、声明索引器c#代码复 制p r iv a te int _ S y;p u b lic int th is int s y (g e t(r e tu r n _ S y;Q s e t s y=_ S y;二、C#中th is 的总结1、I h is 关键字引用被访问成员所在的当前实例。静态成员函数没有th is 指针。th is 关键字可以用来从构造函数,实例方法和实例化访问器中访问成员,不能在静态方法。静态属性访问器或者域声明的变量初始化程序中使用th is 关键字,这将会产生错误。2
17、、在类的构造函数中出现的th is 作为一个值类型表示对正在构造的对象本身的引用。3、在类的方法中出现th is 作为一个值类型表示对调用该方法的对象的引用。4、在结构的构造函数中出现的t h i s 作为一个变量类型表示对正在构造的结构的引用。5、在结构的方法中出现的t h i s 作为一个变量类型表示对调用该方法的结构。5、c#.netSuspendLayout 和 Resume Layout在Designer中会看到这两个方法,究竟是做什么用的呢?一般在加载所有控件之前SuspendLayoul方法,挂起所有控件在界面的逻辑布局事件,等又有布局代码完后再调用ResumeLayout事件吧
18、刚才挂起的逻辑布局一并执行。例如我们在设置初始化控件时候,都会用到Size、Location Anchor或Dock属性,而每一个属性都会去改变控件在界面上的布局,使得控件,每执行一段代码就就要界面重绘一次,那么我们先挂起所有事件,之后一起执行,这样就可以提高带有许多控件的应用程序的性能。控件的布局逻辑被挂起,直到调用R e s u m e L a y o u t 方法为止。当调整控件的多个属性时,将先后使用S u s p e n d L a y o u t 和 R e s u m e L a y o u t 方法取消多个L a y o u t 事件。例如,通常先调用S u s p e n d
19、 L a y o u t 方法,然后设置控件的 S i z e L o c a t i o n A n c h o r 或 D o c k 属性,最后调用 R e s u m e L a y o u t 方法以使更改生效。注意:为了防止layout事件的发生。这个事件将引发重新绘图的事件,如果介面上控件较多的话,改变控件某些属性时,由于不断地重画,性能变低,所以用suspendlayout来阻止。resumelayou可以结束上面的限制。6、C#中的set和get方法在面向对象编程(O O P)中,是不允许外界直接对类的成员变量直接访问的,既然不能访问,那定义这些成员变量还有什么意义呢?所以C
20、#中就要用s e t 和 g e t 方法来访问私有成员变量,它们相当于外界访问对象的一个通道,一 个“接口”。先来看一段代码:c l a s s E m p l o y e ep r i v a t e s t r i n g n a m e;p r i v a t e b y t e a g e;p u b l i c s t r i n g N a m eg e ts e t r e t u r n n a m e;n a m e =v a l u e;p u b l i c b y t e A g eg e t r e t u r n a g e;)s e t a g e =v a l
21、 u e:)代码中定义了两个私有变量n a m e 和 a g e,当我们不想让外界随意访问该私有变量时,可以使用属性来访问,语法为:p u b l i c 返回类型(要与被访问变量的类型相同)属 性 名(不能与被访问变量同名)(g e t r e t u r n 被访问变量;s e t(被访问变量 =v a l u e;)当我们使用属性来访问私有成员变量时就会调用里面的g e t 方法,当我们要修改该变量时就会调用s e t 方法,当然在定义的时候可以只定义一个g e t 方法或只定义一个s e t 方法。如果只定义g e t 方法,那么这个相应变量就是“只读”的;如果只定义s e t 方法
22、,那么相应变量就是“只写”的。c l a s s E m p l o y e ep r i v a t e s t r i n g n a m e;p r i v a t e b y t e a g e;p u b l i c s t r i n g N a m e(g e t r e t u r n n a m e;s e t n a m e =v a l u e;)*修改后*I I l|p u b l i c b y t e A g eg e t r e t u r n a g e;s e t(i f (v a l u e 1 0&v a l u e C#中的异常处理入门try catch
23、 throw软件运行过程中,如果出现了软件正常运行不应该出现的情况,软件就出现了异常。这时候我们需要去处理这些异常。或者让程序终止,避免出现更严重的错误。或者提示用户进行某些更改让程序可以继续运行下去。C#编程语言本身就为我们提供了这种异常处理机制。C#中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。或者试图将一个字符串 aaa 转换成整数。异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C#异常处理时建立在四个关键词之上的:t r y、c at c h、f i n al l y 和 t h r o wo try:一 个 try 块标识了一个将被激活的特定的异常的代
24、码块。后跟一个或多个catch块。catch:程序通过异常处理程序捕获异常。catch关键字表示异常的捕获。finally:finally块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。throw:当问题出现时,程序抛出一个异常。使 用 throw关键字来完成。语法假设一个块将出现异常,一个方法使用t r y 和 c at c h 关键字捕获异常。t r y/c at c h 块内的代码为受保护的代码,使 用 y/c at c h 语法如下所示:1 t r y2 3/引起异常的语句4)5 c at c h (E x c e p t i
25、 o n N am e e l)6 7/错误处理代码8)9 c at c h (E x c e p t i o n N am e e 2)10(n/错误处理代码12)13 c at c h (E x c e p t i o n N am e e N)14 15/错误处理代码16 17 f i n al l y18 19/要执行的语句20)C#提供了很多种异常,我们在这里只要掌握最基本的异常E x c e p t i o n 就可以啦。在 c atc h语句中我们只处理E x c eption这个最基本的异常。下面我们看一个具体的例子,来更加清楚的理解一下C#的异常处理。你创建一个项目。解决方案
26、名称为S loution2 2,项目名称为E x erc ise2 2,项目类型为控制台程序。点击P rogram,c s.在里边加入这些代码。Program.es 月 隼 Exercise22.Program123456 using S ystem;using S ystem.C ollec t ions.G eneric;using S ystem.Linq;using S ystem.Tex t:using S ystem.Threading.Tasks;7891 01 11 21 31 41 51 61 71 81 92 02 12 22 32 42 526272 82 93 03 1
27、3 23 33 43 53 63 73 83 94 04 14 24 34 44 54 64 74 8-namespac e E x erc ise2 2HB c lass P rogram static void Main(st ring args)(try(E x c eptionTest():C onsole.Writ eLine(调用方法 E x c eptionTest 成功“);)c atc h(E x c eption e)C onsole.Writ eLine(调用E x c eptionTest 出现异常“);C onsole.WriteLine(错误的简要信息:+e.Mes
28、sage);C onsole.Writ eLine(详细的错误信息:*+e.S tac kTrac e);)C onsole.R eadLine();)static void E x c eptionTest()C onsole.Writ eLine(清输入一个整数,按回车键结束:);string input=C onsole.R eadLine();int inputN umber:tryinputN umber=C onvert.Tolnt3 2(input);)c at c h(E x c ept i on)C onsole.Writ eLine(E x c ept ionTest 执行
29、出现异常):throw new E x emption(转换出现异常):)finallyC onsole.Writ eLine(E x c ept ionTest 程序在 finally语句中执行“);)1我在这里简要的说明一下这段代码。1.2 7 行-4 5 行 我们新建了一个E x c eptionTest方法。在这个方法中要求用户输入一个整数。如果用户输入一个字符串,我们的程序会产生异常。2.3 9 行 我们用throw抛出了一个我们自己定义的异常。在里边加入了我们想传递的一些信息。3.4 1 行-4 4 行 finally语句是可选的。只有当需要做一些例如资源释放的操作的时候,才是需要
30、的。不管有没有异常产生finally部分都会执行。4.1 3 行-2 3 行 调 用 E x c eptionTest方法。同时捕获异常。5.1 6 行 如果调用E x c eptionTest方法出现异常,这条语句不会执行。否则正常执行。6.2 1 行输出异常的简要信息7.2 2 行输出异常的详细信息。例如出错的代码位置。运行结果1 .用户输入字符串,产生异常file:/E:/vs2013_prqjects/Cleaming/22/Solution22/Exercise22/bin/Debug/Exercise22,EXE请输入一个整数,按回车键结束:I like cttE xception
31、T est执行出现异常 _E xcept ionT est程序在f in ally语句中执行调用E xcept ionT est出现异常错隽的面要信息:转换由现异常详细的错误信息、:at E xerc ise2 2 .P rogram.E xcept ionT est in e:us2 01 3 _pi*o jectsClearning2 2 S olution2 2 E xercise2 2 P rogran.cs:line 3 9at E xerc ise2 2 .P rogram.M a in in e:us2 01 3 _pro jectsC tt learn ing2 2S olut
32、 ion2 2 E xei*c ise2 2 P rogram.cs:line 1 52 .用户输入整数,程序正常执行E g:看下面的程序段:try(return a/b;c atc h(E x c eption e)/当 b 为 0的时候这里可以打印提示:除数不能为0)异常的通俗原理在于,当出现某些错误的时候,你又不想直接把程序直接关闭,那么就在你捕捉到的异常里进行处理,这样程序可以继续运行,而不是马上关闭.上面你返回a/b,正常情况下b 不是0,那么就直接返回,不会执行c atc h里的东西,但是当你的b 是 0,就无法返回数据,那么异常了,异常然后被c atc h捕捉到,就执行 c at
33、c h里的语句,然后继续运行下面的代码.11、C#String.split()用法小结第一种方法string s=abc deabc deabc de;string sA rray=s.S plit C c);foreac h(string i in sA rray)C onsole.WriteLine(i.ToS tringO);输出下面的结果:abdeabdeabde第二种方法我们看到了结果是以一个指定的字符进行的分割。使用另一种构造方法对多个字符进行分割:s t r in g s=z/ab c de ab c de ab c dez,;s t r in g s A r r ay l=s.
34、S p l it (n e w c har 3 c,d,e );f o r e ac h(s t r in g i in s A r r ay l)C o n s o l e.W r it e L in e(i.T o S t r in g O);可以输出下面的结果ababab第三种方法除了以上的这两种方法以外,第三种方法是使用正则表达式。新建一个控制台项目。然后先添加 u s in g S y s t e m.T e x t.R e g u l ar E x p r e s s io n s;S y s t e m.T e x t.R e g u l ar E x p r e s s io
35、n ss t r in g c o n t e n t=ag c s m al l m ac s m al l g g g s m al l y t x;s t r in g r e s u l t S t r in g=R e g e x.S p l it(c o n t e n t,s m al l,R e g e x O p t io n s.I g n o r e C ase)f o r e ac h(s t r in g i in r e s u l t S t r in g)C o n s o l e.W r it e L in e (i.T o S t r in g O);输出下
36、面的结果:ag em acg g gy t x第四种方法s t r in g s t r l=我*是*一*个*教*师;s t r in g 1 s t r 2;s t r l=s t r l.R e p l ac e(*,*);s t r 2=s t r l.S p l it(*);f o r e ac h(s t r in g i in s t r 2)C o n s o l e.W r it e L in e(i.T o S t r in g O);第五种方法s t r in g s t r l=我*是*-*个*教*师;我希望显示的结果为:我是一个教师。我如果采用上面的第四种方法来做就会产
37、生下面的错误,我 是一个教师。中间有空格输出,所以输出结果并不是希望的结果,这就又回到了正则表达式了这时可以采用下面的第五种方法s t r in g s t r l=我*是*个*教*师;s t r in g 1 s t r 2 =S y s t e m.T e x t.R e g u l ar E x p r e s s io n s.R e g e x.S p l it (s t r l,;f o r e ac h(s t r in g i in s t r 2)C o n s o l e.W r it e L in e(i.T o S t r in g O);12、C#异常类相关总结C#异
38、常类一、基 类E x c e p t io nC#异常类二、常见的异常类1 S y s t e m E x c e p t io n类:该类是S y s t e m命名空间中所有其他异常类的基类。(建议:公共语言运行时引发的异常通常用此类)2、A p p l ic at io n E x c e p t io n类:该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此类)C#异常类三、与参数有关的异常类此类异常类均派生于S y s t e m E x c e p t io n,用于处理给方法成员传递的参数时发生异常1、A r g u m e n t E x c e
39、 p t io n类:该类用于处理参数无效的异常,除了继承来的属性名,此类还提供了 s t r in g类型的属性P ar am N am e表示引发异常的参数名称。2、F o r m at E x c e p t io n类:该类用于处理参数格式错误的异常。C#异常类四、与成员访问有关的异常1、M e m b e r A c c e s s E x c e p t io n类:该类用于处理访问类的成员失败时所引发的异常。失败的原因可能的原因是没有足够的访问权限,也可能是要访问的成员根本不存在(类与类之间调用时常用)2、M e m b e r A c c e s s E x c e p t i
40、o n 类的直接派生类:i、F il e A c c e s s E x c e p t io n类:该类用于处理访问字段成员失败所引发的异常ii MethodAccessException类:该类用于处理访问方法成员失败所引发的异常iii、MissingMemberException类:该类用于处理成员不存在时所引发的异常C#异常类五、与数组有关的异常以下三个类均继承于SystemException类1、IndexOutOf Except ion类:该类用于处理下标超出了数组长度所引发的异常2、ArrayTypeMismatchException类:该类用于处理在数组中存储数据类型不正确的元
41、素所引发的异常3、RankException类:该类用于处理维数错误所引发的异常C#异常类六、与10有关的异常LIOException类:该类用于处理进行文件输入输出操作时所引发的异常。2、lOException类的5个直接派生类:i、DirectionN otFoundException类:该类用于处理没有找到指定的目录而引发的异常。ii、FileN otFoundException类:该类用于处理没有找到文件而引发的异常。iii、EndOfStreamException类:该类用于处理已经到达流的末尾而还要继续读数据而引发的异常。iv、FileLoadException类:该类用于处理无法
42、加载文件而引发的异常。v、PathTooLongException类:该类用于处理由于文件名太长而引发的异常。C#异常类七、与算术有关的异常1、ArithmeticException类:该类用于处理与算术有关的异常。2、ArithmeticException 类的派生类:i、D iv id e B y Ze r oE x c e p t ion类:表示整数货十进制运算中试图除以零而引发的异常。ii、N ot F in it e N u m b e r E x c e p t ion类:表示浮点数运算中出现无穷打或者非负值时所引发的异常。13、C#中的Dictionary字典类介绍说明必须包含名
43、空间 S y s t e m.C ol l e c t ion.G e n e r icD ic t ion a r y里面的每一个元素都是一个键值对(由二个元素组成:键和值)键必须是唯一的,而值不需要唯一的键和值都可以是任何类型(比如:s t r in g,i n t,自定义类型,等等)通过一个键读取一个值的时间是接近0(1)键值对之间的偏序可以不定义使用方法:定义D ic t ion a r y op e n Wit h =n e w D ic t ion a r y ();添加元素op e n Wit h.A d d(t x t,op e n Wit h.A d d(b m p,op e
44、 n Wit h.A d d(d ib,op e n Wit h.A d d(r t f,“n ot e p a d.e x e);“p a in t.e x e/z);“p a in t.e x e);/zw or d p a d.e x e);取值C on s ol e.Wr it e L in e (/zF or k e y =r t f,v a l u e =0 .z,,op e n Wit h z,r t f,z);更改值op e n Wit h,zr t fz/=w in w or d.e x e”;C on s ol e.Wr it e L in e (z,F or k e y
45、=r t f,v a l u e =0 .,op e n Wit h r t r j);遍历k e yf or e a c h (s t r in g k e y in op e n Wit h.K e y s)(C on s ol e.Wr it e L in e(K e y =0 ,k e y);)遍历v a l u ef or e a c h (s t r in g v a l u e in op e n Wit h.V a l u e s)C on s ol e.Wr it e L in e (z,v a l u e =0 ,v a l u e);遍历 v a l u e,S e c
46、on d M e t h odD ic t ion a r y .V a l u e C ol l e c t ion v a l u e C ol l =op e n Wit h.V a l u e s;f or e a c h (s t r in g s in v a l u e C ol l)(C on s ol e.Wr it e L in e (S e c on d M e t h od,V a l u e =0 z,,s);遍历字典f or e a c h (K e y V a l u e P a ir k v p in op e n Wit h)(C on s ol e.Wr i
47、t e L in e (Z/K e y =0 ,V a l u e =1 ,k v p.K e y,k v p.V a l u e);)添加存在的元素t r y(op e n Wit h.A d d(t x t,w in w or d.e x e);c a t c h (A r g u m e n t E x c e p t ion)(C on s ol e.Wr it e L in e(A n e l e m e n t w it h K e y =t x t a l r e a d ye x is t s.,z);删除元素op e n Wit h.R e m ov e(d oc);if (
48、!op e n Wit h.C on t a in s K e y(d oc)(C on s ol e.Wr it e L in e (z,K e y d oc is n ot f ou n d.,z);判断键存在if (op e n Wit h.C on t a in s K e y(b m p)/T r u e(C on s ol e.Wr it e L in e (z,A n e l e m e n t w it h K e y =b m p e x is t s./z);参数为其它类型参数为其它类型D ic t ion a r y O t h e r T y p e =n e w D
49、ic t ion a r y ();O t h e r T y p e.A d d (1,1,1 1,1 1 1”.S p l itO t h e r T y p e.A d d (2,2,2 2,2 2 2”.S p l it ;C on s ol e.Wr it e L in e(O t h e r T y p e l 2);参数为自定义类型首先定义类c l a s s D ou C u b ep u b l ic in t C od e g e t r e t u r n _ C od e;s e t _ C od e =v a l u e;p r iv a t e in t _ C o
50、d e;p u b l ic s t r in g P a g e g e t r e t u r n _ P a g e;s e t _ P a g e =v a l u e;p r iv a t e s t r in g _ P a g e;)然后声明并添加元素D ic t ion a r y M y T y p e =n e w D ic t ion a r y ();f or (in t i=1;i =9;i+)D ou C u b e e l e m e n t =n e w D ou C u b e();e l e m e n t.C od e =i*1 0 0;e l e m e