日期:2014-05-17  浏览次数:20676 次

arraylist里面每个元素都是string[]的小问题
让arraylist里面的每个元素都是长度为3的string[],可是运行时候,提示索引超出范围,没找到为什么
        public string process(string text)
        {
            ArrayList list = new ArrayList();
            char[] c = text.ToCharArray();  
            for (int i = 0; i < c.Length;i++ )
            {
                list[i] = new string[3];
                ((string[])list[i])[0]=c[i].ToString();
            }

在这里提示索引超出范围
list[i] = new string[3];

另外,最后一行
((string[])list[i])[0]=c[i].ToString();
如果换成
((string[])list[i])[0]=(string)c[i];

会提示无法转换成功,为深么呢?
------最佳解决方案--------------------
list[i] = new string[3];
报错是因为ArrayList list = new ArrayList();只是创建了一个空的集合,里面0个元素。


(string)c[i];
报错是因为c[i]是一个char,char是值类型,string是引用类型。
前面家加(类型),这种方式要么在值类型中进行,要么在引用类型中进行,不能混合使用。
------其他解决方案--------------------
list[i] = new string[3];
=>
list.Add(new string[3]);
------其他解决方案--------------------
恩,解决了我的问题,确实对可变长度的arraylist初始长度为0,那么用索引arraylist[0]因为不存在,会提示索引超出范围!

第二个,原来要在各自范围内才能强制转换,谢谢!