您的位置:首页 > 编程语言 > C#

天轰穿C#-vs2010 - 04面向对象的编程之访问数组 【原创】

2013-02-26 16:08 411 查看
小天:如果是申明和初始化的时候都没有给值,事后如何给?

老田:你的意思是需要访问数组吧?数组在声明和初始化后,就可以使用索引器访问其中的元素了。不过需要注意数组只支持有整型参数的索引器。

通过索引器传送元素号,就可以访问数组。索引器总是以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中的第六项的值

如果使用错误的索引器值(不存在对应的元素),就会抛出IndexOutOfRangeException类型的异常。如图5-3



图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也太厉害了,是什么机制?还有数组中可以放的都是这些预定义类型吗?能放自定义类型不?

老田:foreach语句利用了本章后面讨论的IEnumerable和IEnumerator接口。下面来看看foreach的机制。

本文章为天轰穿原创作品,转载请注明出处及作者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐