天轰穿C#-vs2010 - 04面向对象的编程之访问数组 【原创】
2013-02-26 16:08
411 查看
小天:如果是申明和初始化的时候都没有给值,事后如何给?
老田:你的意思是需要访问数组吧?数组在声明和初始化后,就可以使用索引器访问其中的元素了。不过需要注意数组只支持有整型参数的索引器。
通过索引器传送元素号,就可以访问数组。索引器总是以0开头,表示第一个元素。可以传送给索引器的最大值是元素个数减1,因为索引从0开始。在下面的例子中,数组myInt3用7个整型值声明和初始化。用索引器0、1、2、3、4、5、6就可以访问该数组中的元素。
如果使用错误的索引器值(不存在对应的元素),就会抛出IndexOutOfRangeException类型的异常。如图5-3
图5-3
小天:如果我们去访问一个没有值的数组项有什么效果?
老田:自己试下不就知道,我是人,我又不是C#编译器。如下:
小天:数组才初始化,项中应该没有值啊,为什么不会出错呢?
老田:因为myInt5在初始化分配内存空间的时候顺便也实例化了一个int类型放在这个空间中。所以这个时候项中是有值的,只不过是int类型初始化出来的0而已。
小天:如果是那种使用直接给值进行初始化的数组,怎么能够知道到底有多少项呢?
老田:如果不知道数组中的元素个数,则可以使用数组的Length属性。如下
小天:如果我想依次取出数组中的全部项的值并显示出来,怎么做呢?
老田:有两种形式,一种是使用for循环来遍历整个数组,第二种则是使用foreach语句迭代整个数组。下面分别使用了两种形式(其中一种for循环扩展了一些知识):
小天:我觉得foreach也太厉害了,是什么机制?还有数组中可以放的都是这些预定义类型吗?能放自定义类型不?
老田:foreach语句利用了本章后面讨论的IEnumerable和IEnumerator接口。下面来看看foreach的机制。
本文章为天轰穿原创作品,转载请注明出处及作者。
老田:你的意思是需要访问数组吧?数组在声明和初始化后,就可以使用索引器访问其中的元素了。不过需要注意数组只支持有整型参数的索引器。
通过索引器传送元素号,就可以访问数组。索引器总是以0开头,表示第一个元素。可以传送给索引器的最大值是元素个数减1,因为索引从0开始。在下面的例子中,数组myInt3用7个整型值声明和初始化。用索引器0、1、2、3、4、5、6就可以访问该数组中的元素。
int[] myInt3 = { 11, 12, 30, 53, 21, 38, 27 }; //访问数组 int i1 = myInt3[0]; //将数组myInt3中的第一项交给变量i1; int i2 = myInt3[3]; //将数组myInt3中的第四项交给变量i2; myInt3[2] = 18; //修改数组myInt3中的第三项的值 myInt3[5] = 90; //修改数组myInt3中的第六项的值 |
图5-3
小天:如果我们去访问一个没有值的数组项有什么效果?
老田:自己试下不就知道,我是人,我又不是C#编译器。如下:
int[] myInt5 = new int[7]; myInt5[2] = 18; //不会出错,因为这是为项赋值 int i4 = myInt5[0]; //不会出错 |
老田:因为myInt5在初始化分配内存空间的时候顺便也实例化了一个int类型放在这个空间中。所以这个时候项中是有值的,只不过是int类型初始化出来的0而已。
小天:如果是那种使用直接给值进行初始化的数组,怎么能够知道到底有多少项呢?
老田:如果不知道数组中的元素个数,则可以使用数组的Length属性。如下
int[] myInt6 = { 11, 12, 30, 53, 21, 38, 27 }; int i5 = myInt6.Length; MessageBox.Show(i5.ToString()); //猜猜我这个代码是写在什么类型程序的什么地方的? |
老田:有两种形式,一种是使用for循环来遍历整个数组,第二种则是使用foreach语句迭代整个数组。下面分别使用了两种形式(其中一种for循环扩展了一些知识):
//申明一个数组 int[] myInt7 = new int[] { 11, 12, 30, 53, 21, 38, 27 }; //简易的读出数组的值 for (int i = 0; i < myInt7.Length; i++) { Console.WriteLine(myInt7[i].ToString()); } //由于上面的显示太简单了,我们将之拼成一个字符串来显示,完善如下 //-------------申明一个字符串变量用来接收最后显示结果--------------- string str = ""; //下一句申明循环从0开始,循环整数组项 //可以尝试将小于改为小于等于,并用断点监视i的值 for (int i = 0; i < myInt7.Length; i++) { str += myInt7[i].ToString() + ","; } //因为str的值,最后会有一个逗号,下面这句代码则是将最后一个逗号的位置找出来并移除 //如果不知道这句的意思,可以去MSDN找下Remove和LastIndexOf的解释 str = str.Remove(str.LastIndexOf(',')); label1.Text = str; //-------------完善版for循环示例完毕--------------- //下面实例为使用foreach来迭代整个数组,最终和for的简易实例一样,你自己来完善吧 foreach (int v in myInt7) { Console.WriteLine(v.ToString()); } |
老田:foreach语句利用了本章后面讨论的IEnumerable和IEnumerator接口。下面来看看foreach的机制。
本文章为天轰穿原创作品,转载请注明出处及作者。
相关文章推荐
- 天轰穿C# -vs2010 - 04面向对象的编程之创建类【原创】
- .天轰穿C# -vs2010 - 04面向对象的编程之实例化类对象【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之类和结构的区别【原创】
- 天轰穿C#-vs2010-04面向对象的编程之foreach循环【原创】
- .天轰穿C# -vs2010 - 04面向对象的编程之命名空间【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之调用方法和属性【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之构造函数【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之访问修饰符【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之简单数组 【原创】
- .天轰穿C# -vs2010 - 04面向对象的编程之接口 VS 抽象类 【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之继承中的类型转换【原创】
- .天轰穿C# -vs2010 - 04面向对象的编程之类的使用【原创】 2012-12-17 10:55阅读(0).
- 天轰穿C# -vs2010 - 04面向对象的编程之类关系图【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之属性【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之运算符的工作方式【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之实现继承【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之面向对象的编程简介【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之多重继承 【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之抽象类和抽象方法【原创】
- 天轰穿C# -vs2010 - 04面向对象的编程之多态【原创】