对于http://www.cnblogs.com/lihaozy/archive/2010/10/28/1863469.html一文中的用索引器对某一对象中的内置数组访问时,会出现数组越界的情况,我们使用了ArrayList来代替该对象所属类中的数组。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace ConsoleApplication1 { public class MyPreviousExp { private ArrayList myCompanies2 = new ArrayList(10); //index creation public string this[int index]{ get { if (index < 0 || index >= 6) return "null"; else return myCompanies2[index].ToString(); } set { if (!(index < 0 || index >= 10))//初始时只有10的capacity { myCompanies2.Insert(index, value); myCompanies2.RemoveAt(index + 1); } else if (index >= 10)//但是如果超过了10,我们也可以动态的变更大小 { if (index < myCompanies2.Count) { myCompanies2.Insert(index, value); myCompanies2.RemoveAt(index + 1); } else { int temp = index - (myCompanies2.Count - 1); for (int i = 0; i < temp; i++) { myCompanies2.Add("");//这里如果添加的是null的话,那么后面在输出Console.WriteLine(" My Companies{0} : {1} ", i, indexerObj[i].ToString());的时候就会出问题,因为null不是一个object,所以就没法转换成string } myCompanies2.Insert(index, value); myCompanies2.RemoveAt(index + 1); } } } } public static void Main() { try { MyPreviousExp indexerObj = new MyPreviousExp(); for (int i = 0; i < 10; i++) { indexerObj.myCompanies2.Add(i.ToString());//先要对Arraylist中的东西插入元素! } indexerObj[1] = "AMS"; indexerObj[3] = "HCL"; indexerObj[5] = "ACC"; indexerObj[8] = "OFW"; indexerObj[15] = "CFG";//这里插入的元素的index是15,所以在MyPreviousExpde set()方法中,就对indexOutOfRange做了处理,先添加相对应个数的""空字符串,然后再在相对应的位置上给该元素赋值 for (int i = 0; i < indexerObj.myCompanies2.Count; i++) { Console.WriteLine(" My Companies{0} : {1} ", i, indexerObj[i].ToString()); } } catch (Exception e) { Console.WriteLine(e.Message); } } } }
输出为:
My Companies0 : 0 My Companies1 : AMS My Companies2 : 2 My Companies3 : HCL My Companies4 : 4 My Companies5 : ACC My Companies6 : null My Companies7 : null My Companies8 : null My Companies9 : null My Companies10 : null My Companies11 : null My Companies12 : null My Companies13 : null My Companies14 : null My Companies15 : null
可以看到,类初始的时候申请了大小为10的空间,但是因为是ArrayList,通过在利用索引器对myCompanies2中的ArrayList赋值时,发生越界的情况,进行了add()的处理,来补充够ArrayList中元素的个数。从而实现了扩充到16大小的结果(见上面的结果)(后面都是null是因为在get的定义中,对于大于等于6的索引,是不返回真实值的,而是返回null)。