博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

小天:如果是申明和初始化的时候都没有给值,事后如何给?

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

通过索引器传送元素号,就可以访问数组。索引器总是以0开头,表示第一个元素。可以传送给索引器的最大值是元素个数减1,因为索引从0开始。在下面的例子中,数组myInt37个整型值声明和初始化。用索引器0123456就可以访问该数组中的元素。

            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找下RemoveLastIndexOf的解释

str = str.Remove(str.LastIndexOf(','));

            label1.Text = str;    

//-------------完善版for循环示例完毕---------------

           //下面实例为使用foreach来迭代整个数组,最终和for的简易实例一样,你自己来完善吧

            foreach (int v in myInt7)

            {

                Console.WriteLine(v.ToString());

            }

       小天:我觉得foreach也太厉害了,是什么机制?还有数组中可以放的都是这些预定义类型吗?能放自定义类型不?

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

    本文章为天轰穿原创作品,转载请注明出处及作者。